View | Details | Raw Unified | Return to bug 17047
Collapse All | Expand All

(-)a/C4/Serials.pm (-19 / +20 lines)
Lines 871-889 sub GetDistributedTo { Link Here
871
    my (
871
    my (
872
        $nextseq,       $newlastvalue1, $newlastvalue2, $newlastvalue3,
872
        $nextseq,       $newlastvalue1, $newlastvalue2, $newlastvalue3,
873
        $newinnerloop1, $newinnerloop2, $newinnerloop3
873
        $newinnerloop1, $newinnerloop2, $newinnerloop3
874
    ) = GetNextSeq( $subscription, $pattern, $planneddate );
874
    ) = GetNextSeq( $subscription, $pattern, $frequency, $planneddate );
875
875
876
$subscription is a hashref containing all the attributes of the table
876
$subscription is a hashref containing all the attributes of the table
877
'subscription'.
877
'subscription'.
878
$pattern is a hashref containing all the attributes of the table
878
$pattern is a hashref containing all the attributes of the table
879
'subscription_numberpatterns'.
879
'subscription_numberpatterns'.
880
$frequency is a hashref containing all the attributes of the table 'subscription_frequencies'
880
$planneddate is a date string in iso format.
881
$planneddate is a date string in iso format.
881
This function get the next issue for the subscription given on input arg
882
This function get the next issue for the subscription given on input arg
882
883
883
=cut
884
=cut
884
885
885
sub GetNextSeq {
886
sub GetNextSeq {
886
    my ($subscription, $pattern, $planneddate) = @_;
887
    my ($subscription, $pattern, $frequency, $planneddate) = @_;
887
888
888
    return unless ($subscription and $pattern);
889
    return unless ($subscription and $pattern);
889
890
Lines 896-902 sub GetNextSeq { Link Here
896
        if(@irreg > 0) {
897
        if(@irreg > 0) {
897
            my $irregularities = {};
898
            my $irregularities = {};
898
            $irregularities->{$_} = 1 foreach(@irreg);
899
            $irregularities->{$_} = 1 foreach(@irreg);
899
            my $issueno = GetFictiveIssueNumber($subscription, $planneddate) + 1;
900
            my $issueno = GetFictiveIssueNumber($subscription, $planneddate, $frequency) + 1;
900
            while($irregularities->{$issueno}) {
901
            while($irregularities->{$issueno}) {
901
                $count++;
902
                $count++;
902
                $issueno++;
903
                $issueno++;
Lines 1039-1045 sub GetExpirationDate { Link Here
1039
1040
1040
            #calculate the date of the last issue.
1041
            #calculate the date of the last issue.
1041
            for ( my $i = 1 ; $i <= $length ; $i++ ) {
1042
            for ( my $i = 1 ; $i <= $length ; $i++ ) {
1042
                $enddate = GetNextDate( $subscription, $enddate );
1043
                $enddate = GetNextDate( $subscription, $enddate, $frequency );
1043
            }
1044
            }
1044
        } elsif ( $subscription->{monthlength} ) {
1045
        } elsif ( $subscription->{monthlength} ) {
1045
            if ( $$subscription{startdate} ) {
1046
            if ( $$subscription{startdate} ) {
Lines 1191-1206 sub ModSerialStatus { Link Here
1191
    if ( !$otherIssueExpected && $oldstatus == EXPECTED && $status != EXPECTED ) {
1192
    if ( !$otherIssueExpected && $oldstatus == EXPECTED && $status != EXPECTED ) {
1192
        my $subscription = GetSubscription($subscriptionid);
1193
        my $subscription = GetSubscription($subscriptionid);
1193
        my $pattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($subscription->{numberpattern});
1194
        my $pattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($subscription->{numberpattern});
1195
        my $frequency = C4::Serials::Frequency::GetSubscriptionFrequency($subscription->{periodicity});
1194
1196
1195
        # next issue number
1197
        # next issue number
1196
        my (
1198
        my (
1197
            $newserialseq,  $newlastvalue1, $newlastvalue2, $newlastvalue3,
1199
            $newserialseq,  $newlastvalue1, $newlastvalue2, $newlastvalue3,
1198
            $newinnerloop1, $newinnerloop2, $newinnerloop3
1200
            $newinnerloop1, $newinnerloop2, $newinnerloop3
1199
          )
1201
          )
1200
          = GetNextSeq( $subscription, $pattern, $publisheddate );
1202
          = GetNextSeq( $subscription, $pattern, $frequency, $publisheddate );
1201
1203
1202
        # next date (calculated from actual date & frequency parameters)
1204
        # next date (calculated from actual date & frequency parameters)
1203
        my $nextpublisheddate = GetNextDate($subscription, $publisheddate, 1);
1205
        my $nextpublisheddate = GetNextDate($subscription, $publisheddate, $frequency, 1);
1204
        my $nextpubdate = $nextpublisheddate;
1206
        my $nextpubdate = $nextpublisheddate;
1205
        $query = "UPDATE subscription SET lastvalue1=?, lastvalue2=?, lastvalue3=?, innerloop1=?, innerloop2=?, innerloop3=?
1207
        $query = "UPDATE subscription SET lastvalue1=?, lastvalue2=?, lastvalue3=?, innerloop1=?, innerloop2=?, innerloop3=?
1206
                    WHERE  subscriptionid = ?";
1208
                    WHERE  subscriptionid = ?";
Lines 1409-1415 sub NewSubscription { Link Here
1409
    $innerloop3, $status, $notes, $letter, $firstacquidate, $irregularity,
1411
    $innerloop3, $status, $notes, $letter, $firstacquidate, $irregularity,
1410
    $numberpattern, $locale, $callnumber, $manualhistory, $internalnotes,
1412
    $numberpattern, $locale, $callnumber, $manualhistory, $internalnotes,
1411
    $serialsadditems, $staffdisplaycount, $opacdisplaycount, $graceperiod,
1413
    $serialsadditems, $staffdisplaycount, $opacdisplaycount, $graceperiod,
1412
    $location, $enddate, $skip_serialseq, $itemtype, $previousitemtype
1414
    $location, $enddate, $skip_serialseq, $itemtype, $previousitemtype, $mana_id
1413
    ) = @_;
1415
    ) = @_;
1414
    my $dbh = C4::Context->dbh;
1416
    my $dbh = C4::Context->dbh;
1415
1417
Lines 1423-1430 sub NewSubscription { Link Here
1423
            irregularity, numberpattern, locale, callnumber,
1425
            irregularity, numberpattern, locale, callnumber,
1424
            manualhistory, internalnotes, serialsadditems, staffdisplaycount,
1426
            manualhistory, internalnotes, serialsadditems, staffdisplaycount,
1425
            opacdisplaycount, graceperiod, location, enddate, skip_serialseq,
1427
            opacdisplaycount, graceperiod, location, enddate, skip_serialseq,
1426
            itemtype, previousitemtype)
1428
            itemtype, previousitemtype, mana_id)
1427
        VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
1429
        VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?)
1428
        |;
1430
        |;
1429
    my $sth = $dbh->prepare($query);
1431
    my $sth = $dbh->prepare($query);
1430
    $sth->execute(
1432
    $sth->execute(
Lines 1435-1441 sub NewSubscription { Link Here
1435
        $firstacquidate, $irregularity, $numberpattern, $locale, $callnumber,
1437
        $firstacquidate, $irregularity, $numberpattern, $locale, $callnumber,
1436
        $manualhistory, $internalnotes, $serialsadditems, $staffdisplaycount,
1438
        $manualhistory, $internalnotes, $serialsadditems, $staffdisplaycount,
1437
        $opacdisplaycount, $graceperiod, $location, $enddate, $skip_serialseq,
1439
        $opacdisplaycount, $graceperiod, $location, $enddate, $skip_serialseq,
1438
        $itemtype, $previousitemtype
1440
        $itemtype, $previousitemtype, $mana_id
1439
    );
1441
    );
1440
1442
1441
    my $subscriptionid = $dbh->{'mysql_insertid'};
1443
    my $subscriptionid = $dbh->{'mysql_insertid'};
Lines 2193-2199 sub abouttoexpire { Link Here
2193
        my $expirationdate = GetExpirationDate($subscriptionid);
2195
        my $expirationdate = GetExpirationDate($subscriptionid);
2194
2196
2195
        my ($res) = $dbh->selectrow_array('select max(planneddate) from serial where subscriptionid = ?', undef, $subscriptionid);
2197
        my ($res) = $dbh->selectrow_array('select max(planneddate) from serial where subscriptionid = ?', undef, $subscriptionid);
2196
        my $nextdate = GetNextDate($subscription, $res);
2198
        my $nextdate = GetNextDate($subscription, $res, $frequency);
2197
2199
2198
        # only compare dates if both dates exist.
2200
        # only compare dates if both dates exist.
2199
        if ($nextdate and $expirationdate) {
2201
        if ($nextdate and $expirationdate) {
Lines 2259-2265 sub GetSubscriptionsFromBorrower { Link Here
2259
2261
2260
=head2 GetFictiveIssueNumber
2262
=head2 GetFictiveIssueNumber
2261
2263
2262
$issueno = GetFictiveIssueNumber($subscription, $publishedate);
2264
$issueno = GetFictiveIssueNumber($subscription, $publishedate, $frequency);
2263
2265
2264
Get the position of the issue published at $publisheddate, considering the
2266
Get the position of the issue published at $publisheddate, considering the
2265
first issue (at firstacquidate) is at position 1, the next is at position 2, etc...
2267
first issue (at firstacquidate) is at position 1, the next is at position 2, etc...
Lines 2273-2281 date, and $publisheddate. Link Here
2273
=cut
2275
=cut
2274
2276
2275
sub GetFictiveIssueNumber {
2277
sub GetFictiveIssueNumber {
2276
    my ($subscription, $publisheddate) = @_;
2278
    my ($subscription, $publisheddate, $frequency) = @_;
2277
2279
2278
    my $frequency = GetSubscriptionFrequency($subscription->{'periodicity'});
2279
    my $unit = $frequency->{unit} ? lc $frequency->{'unit'} : undef;
2280
    my $unit = $frequency->{unit} ? lc $frequency->{'unit'} : undef;
2280
    my $issueno = 0;
2281
    my $issueno = 0;
2281
2282
Lines 2393-2404 sub _get_next_date_year { Link Here
2393
2394
2394
=head2 GetNextDate
2395
=head2 GetNextDate
2395
2396
2396
$resultdate = GetNextDate($publisheddate,$subscription)
2397
$resultdate = GetNextDate($publisheddate,$subscription,$freqdata,$updatecount)
2397
2398
2398
this function it takes the publisheddate and will return the next issue's date
2399
this function it takes the publisheddate and will return the next issue's date
2399
and will skip dates if there exists an irregularity.
2400
and will skip dates if there exists an irregularity.
2400
$publisheddate has to be an ISO date
2401
$publisheddate has to be an ISO date
2401
$subscription is a hashref containing at least 'periodicity', 'firstacquidate', 'irregularity', and 'countissuesperunit'
2402
$subscription is a hashref containing at least 'firstacquidate', 'irregularity', and 'countissuesperunit'
2403
$frequency is a hashref containing frequency informations
2402
$updatecount is a boolean value which, when set to true, update the 'countissuesperunit' in database
2404
$updatecount is a boolean value which, when set to true, update the 'countissuesperunit' in database
2403
- eg if periodicity is monthly and $publisheddate is 2007-02-10 but if March and April is to be
2405
- eg if periodicity is monthly and $publisheddate is 2007-02-10 but if March and April is to be
2404
skipped then the returned date will be 2007-05-10
2406
skipped then the returned date will be 2007-05-10
Lines 2411-2421 Return undef if subscription is irregular Link Here
2411
=cut
2413
=cut
2412
2414
2413
sub GetNextDate {
2415
sub GetNextDate {
2414
    my ( $subscription, $publisheddate, $updatecount ) = @_;
2416
    my ( $subscription, $publisheddate, $freqdata, $updatecount ) = @_;
2415
2417
2416
    return unless $subscription and $publisheddate;
2418
    return unless $subscription and $publisheddate;
2417
2419
2418
    my $freqdata = GetSubscriptionFrequency($subscription->{'periodicity'});
2419
2420
2420
    if ($freqdata->{'unit'}) {
2421
    if ($freqdata->{'unit'}) {
2421
        my ( $year, $month, $day ) = split /-/, $publisheddate;
2422
        my ( $year, $month, $day ) = split /-/, $publisheddate;
Lines 2435-2441 sub GetNextDate { Link Here
2435
2436
2436
        # Get the 'fictive' next issue number
2437
        # Get the 'fictive' next issue number
2437
        # It is used to check if next issue is an irregular issue.
2438
        # It is used to check if next issue is an irregular issue.
2438
        my $issueno = GetFictiveIssueNumber($subscription, $publisheddate) + 1;
2439
        my $issueno = GetFictiveIssueNumber($subscription, $publisheddate, $freqdata) + 1;
2439
2440
2440
        # Then get the next date
2441
        # Then get the next date
2441
        my $unit = lc $freqdata->{'unit'};
2442
        my $unit = lc $freqdata->{'unit'};
(-)a/Koha/SharedContent.pm (+90 lines)
Line 0 Link Here
1
package Koha::SharedContent;
2
3
# Copyright 2016 BibLibre Morgane Alonso
4
#
5
# This file is part of Koha.
6
#
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 3 of the License, or (at your option) any later
10
# version.
11
#
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.
15
#
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.
19
20
use Modern::Perl;
21
use JSON;
22
use HTTP::Request;
23
use LWP::UserAgent;
24
25
our $MANA_IP = "http://10.25.159.107:5000";
26
27
sub manaRequest {
28
    my $mana_request = shift;
29
    my $result;
30
31
    $mana_request->content_type('application/json');
32
    my $userAgent = LWP::UserAgent->new;
33
    my $response  = $userAgent->request($mana_request);
34
35
    if ( $response->code ne "204" ) {
36
        $result = from_json( $response->decoded_content );
37
    }
38
    $result->{code} = $response->code;
39
40
    return $result if ( $response->code =~ /^2..$/ );
41
}
42
43
sub manaNewUserPatchRequest {
44
    my $resource = shift;
45
    my $id       = shift;
46
47
    my $url = "$MANA_IP/$resource/$id.json/newUser";
48
    my $request = HTTP::Request->new( PATCH => $url );
49
50
    return manaRequest($request);
51
}
52
53
sub manaPostRequest {
54
    my $resource = shift;
55
    my $content  = shift;
56
57
    my $url = "$MANA_IP/$resource.json";
58
    my $request = HTTP::Request->new( POST => $url );
59
60
    $content->{bulk_import} = 0;
61
    my $json = to_json( $content, { utf8 => 1 } );
62
    $request->content($json);
63
64
    return manaRequest($request);
65
}
66
67
sub manaGetRequestWithId {
68
    my $resource = shift;
69
    my $id       = shift;
70
71
    my $url = "$MANA_IP/$resource/$id.json";
72
    my $request = HTTP::Request->new( GET => $url );
73
74
    return manaRequest($request);
75
}
76
77
sub manaGetRequest {
78
    my $resource   = shift;
79
    my $parameters = shift;
80
81
    $parameters = join '&',
82
      map { defined $parameters->{$_} ? $_ . "=" . $parameters->{$_} : () }
83
      keys %$parameters;
84
    my $url = "$MANA_IP/$resource.json?$parameters";
85
    my $request = HTTP::Request->new( GET => $url );
86
87
    return manaRequest($request);
88
}
89
90
1;
(-)a/Koha/Subscription.pm (+66 lines)
Lines 22-27 use Modern::Perl; Link Here
22
use Carp;
22
use Carp;
23
23
24
use Koha::Database;
24
use Koha::Database;
25
use Koha::Biblios;
26
use Koha::Biblioitems;
27
use Koha::Subscriptions;
28
use Koha::Subscription::Frequencies;
29
use Koha::Subscription::Numberpatterns;
30
use JSON;
25
31
26
use base qw(Koha::Object);
32
use base qw(Koha::Object);
27
33
Lines 39-44 Koha::Subscription - Koha Subscription Object class Link Here
39
45
40
=cut
46
=cut
41
47
48
sub get_search_info {
49
    my $searched_sub_id = shift;
50
    my $biblio = Koha::Biblios->find( { 'biblionumber' => $searched_sub_id } );
51
    my $biblioitem =
52
      Koha::Biblioitems->find( { 'biblionumber' => $searched_sub_id } );
53
54
    my $sub_mana_info = {
55
        'title'         => $biblio->title,
56
        'issn'          => $biblioitem->issn,
57
        'ean'           => $biblioitem->ean,
58
        'publishercode' => $biblioitem->publishercode
59
    };
60
    return $sub_mana_info;
61
}
62
63
sub get_sharable_info {
64
    my $shared_sub_id = shift;
65
    my $subscription  = Koha::Subscriptions->find($shared_sub_id);
66
    my $biblio        = Koha::Biblios->find( $subscription->biblionumber );
67
    my $biblioitem    = Koha::Biblioitems->find(
68
        { 'biblionumber' => $subscription->biblionumber } );
69
    my $sub_frequency =
70
      Koha::Subscription::Frequencies->find( $subscription->periodicity );
71
    my $sub_numberpatteern =
72
      Koha::Subscription::Numberpatterns->find( $subscription->numberpattern );
73
74
    my $sub_mana_info = {
75
        'title'           => $biblio->title,
76
        'sfdescription'   => $sub_frequency->description,
77
        'unit'            => $sub_frequency->unit,
78
        'unitsperissue'   => $sub_frequency->unitsperissue,
79
        'issuesperunit'   => $sub_frequency->issuesperunit,
80
        'label'           => $sub_numberpatteern->label,
81
        'sndescription'   => $sub_numberpatteern->description,
82
        'numberingmethod' => $sub_numberpatteern->numberingmethod,
83
        'label1'          => $sub_numberpatteern->label1,
84
        'add1'            => $sub_numberpatteern->add1,
85
        'every1'          => $sub_numberpatteern->every1,
86
        'whenmorethan1'   => $sub_numberpatteern->whenmorethan1,
87
        'setto1'          => $sub_numberpatteern->setto1,
88
        'numbering1'      => $sub_numberpatteern->numbering1,
89
        'label2'          => $sub_numberpatteern->label2,
90
        'add2'            => $sub_numberpatteern->add2,
91
        'every2'          => $sub_numberpatteern->every2,
92
        'whenmorethan2'   => $sub_numberpatteern->whenmorethan2,
93
        'setto2'          => $sub_numberpatteern->setto2,
94
        'numbering2'      => $sub_numberpatteern->numbering2,
95
        'label3'          => $sub_numberpatteern->label3,
96
        'add3'            => $sub_numberpatteern->add3,
97
        'every3'          => $sub_numberpatteern->every3,
98
        'whenmorethan3'   => $sub_numberpatteern->whenmorethan3,
99
        'setto3'          => $sub_numberpatteern->setto3,
100
        'numbering3'      => $sub_numberpatteern->numbering3,
101
        'issn'            => $biblioitem->issn,
102
        'ean'             => $biblioitem->ean,
103
        'publishercode'   => $biblioitem->publishercode
104
    };
105
    return $sub_mana_info;
106
}
107
42
sub _type {
108
sub _type {
43
    return 'Subscription';
109
    return 'Subscription';
44
}
110
}
(-)a/Koha/Subscription/Frequencies.pm (+57 lines)
Line 0 Link Here
1
package Koha::Subscription::Frequencies;
2
3
# Copyright 2016 BibLibre Morgane Alonso
4
#
5
# This file is part of Koha.
6
#
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 3 of the License, or (at your option) any later
10
# version.
11
#
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.
15
#
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.
19
20
use Modern::Perl;
21
use Koha::Database;
22
use Koha::Subscription::Frequency;
23
use base qw(Koha::Objects);
24
25
=head1 NAME
26
27
Koha::Subscription::Frequencies - Koha Subscription::Frequency object set class
28
29
=head1 API
30
31
=head2 Class Methods
32
33
=cut
34
35
=head3 type
36
37
=cut
38
39
sub _type {
40
    return 'SubscriptionFrequency';
41
}
42
43
=head3 object_class
44
45
=cut
46
47
sub object_class {
48
    return 'Koha::Subscription::Frequency';
49
}
50
51
=head1 AUTHOR
52
53
Morgane Alonso <morgane.alonso@biblibre.com>
54
55
=cut
56
57
1;
(-)a/Koha/Subscription/Frequency.pm (+48 lines)
Line 0 Link Here
1
package Koha::Subscription::Frequency;
2
3
# Copyright 2016 BibLibre Morgane Alonso
4
#
5
# This file is part of Koha.
6
#
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 3 of the License, or (at your option) any later
10
# version.
11
#
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.
15
#
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.
19
20
use Modern::Perl;
21
use Koha::Database;
22
use base qw(Koha::Object);
23
24
=head1 NAME
25
26
Koha::Subscription::Frequency - Koha Subscription::Frequency Object class
27
28
=head1 API
29
30
=head2 Class Methods
31
32
=cut
33
34
=head3 type
35
36
=cut
37
38
sub _type {
39
    return 'SubscriptionFrequency';
40
}
41
42
=head1 AUTHOR
43
44
Morgane Alonso <morgane.alonso@biblibre.com>
45
46
=cut
47
48
1;
(-)a/Koha/Subscription/Numberpattern.pm (+48 lines)
Line 0 Link Here
1
package Koha::Subscription::Numberpattern;
2
3
# Copyright 2016 BibLibre Morgane Alonso
4
#
5
# This file is part of Koha.
6
#
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 3 of the License, or (at your option) any later
10
# version.
11
#
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.
15
#
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.
19
20
use Modern::Perl;
21
use Koha::Database;
22
use base qw(Koha::Object);
23
24
=head1 NAME
25
26
Koha::SubscriptionNumberpattern - Koha SubscriptionNumberpattern Object class
27
28
=head1 API
29
30
=head2 Class Methods
31
32
=cut
33
34
=head3 type
35
36
=cut
37
38
sub _type {
39
    return 'SubscriptionNumberpattern';
40
}
41
42
=head1 AUTHOR
43
44
Morgane Alonso <morgane.alonso@biblibre.com>
45
46
=cut
47
48
1;
(-)a/Koha/Subscription/Numberpatterns.pm (+77 lines)
Line 0 Link Here
1
package Koha::Subscription::Numberpatterns;
2
3
# Copyright 2016 BibLibre Morgane Alonso
4
#
5
# This file is part of Koha.
6
#
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 3 of the License, or (at your option) any later
10
# version.
11
#
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.
15
#
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.
19
20
use Modern::Perl;
21
use Koha::Database;
22
use Koha::Subscription::Numberpattern;
23
use base qw(Koha::Objects);
24
25
=head1 NAME
26
27
Koha::SubscriptionNumberpatterns - Koha SubscriptionNumberpattern object set class
28
29
=head1 API
30
31
=head2 Class Methods
32
33
=cut
34
35
=head3 uniqeLabel
36
37
=cut
38
39
sub uniqueLabel {
40
    my ($self, $label) = @_;
41
42
    my $samelabel = Koha::Subscription::Numberpatterns->search({label => $label})->next();
43
    if ($samelabel) {
44
        my $i = 2;
45
        my $newlabel = $samelabel->label . " ($i)";
46
        while (my $othersamelabel = $self->search({label => $newlabel})->next()) {
47
            $i++;
48
            $newlabel = $samelabel->label . " ($i)";
49
        }
50
        $label = $newlabel;
51
    }
52
    return $label;
53
}
54
55
=head3 type
56
57
=cut
58
59
sub _type {
60
    return 'SubscriptionNumberpattern';
61
}
62
63
=head3 object_class
64
65
=cut
66
67
sub object_class {
68
    return 'Koha::Subscription::Numberpattern';
69
}
70
71
=head1 AUTHOR
72
73
Morgane Alonso <morgane.alonso@biblibre.com>
74
75
=cut
76
77
1;
(-)a/installer/data/mysql/atomicupdate/mana_01-add_mana_id_in_subscription.sql (+1 lines)
Line 0 Link Here
1
ALTER TABLE subscription ADD mana_id int(11);
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/mana-subscription-search-result.inc (+46 lines)
Line 0 Link Here
1
[% USE KohaDates %]
2
<table id="mana_results_datatable">
3
    <thead>
4
        <tr>
5
            <th>ISSN</th>
6
            <th class="anti-the">Title</th>
7
            <th>Frequency</th>
8
            <th>Numbering pattern</th>
9
            <th class="NoSort">Number of users</th>
10
            <th class="title-string">Last Import</th>
11
            [% UNLESS search_only %]
12
              <th class="NoSort">Actions</th>
13
            [% END %]
14
        </tr>
15
    </thead>
16
    <tfoot>
17
        <tr>
18
            <td><input type="text" class="dt-filter" data-column_num="0" placeholder="Search ISSN" /></td>
19
            <td><input type="text" class="dt-filter" data-column_num="1" placeholder="Search title" /></td>
20
            <td><input type="text" class="dt-filter" data-column_num="2" placeholder="Search frequency" /></td>
21
            <td><input type="text" class="dt-filter" data-column_num="3" placeholder="Search numbering pattern" /></td>
22
            <td></td>
23
            <td><input type="text" class="dt-filter" data-column_num="5" placeholder="Search last import" /></td>
24
            [% UNLESS search_only %]
25
              <td></td>
26
            [% END %]
27
        </tr>
28
    </tfoot>
29
    <tbody>
30
        [% FOREACH subscription IN subscriptions %]
31
            [% UNLESS subscription.cannotdisplay %]
32
                <tr id="row[% subscription.subscriptionid %]">
33
                    <td>[% IF ( subscription.issn ) %][% subscription.issn %][% END %]</td>
34
                    <td>[% subscription.title %]</a></td>
35
                    <td>[% IF ( subscription.sfdescription ) %][% subscription.sfdescription %][% END %]</td>
36
                    <td>[% IF ( subscription.numberingmethod ) %][% subscription.numberingmethod %][% END %]</td>
37
                    <td>[% IF ( subscription.nbofusers ) %][% subscription.nbofusers %][% END %]</td>
38
                    <td><span title="[% subscription.lastimport %]">[% subscription.lastimport | $KohaDates %]</span></td>
39
                    [% UNLESS search_only %]
40
                      <td><a style="cursor:pointer" onclick="mana_use([% subscription.id %])"> <i class="fa fa-inbox"></i> Use</a></td>
41
                    [% END %]
42
                </tr>
43
            [% END %]
44
        [% END %]
45
    </tbody>
46
</table>
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-menu.inc (+3 lines)
Lines 31-34 Link Here
31
        </a>
31
        </a>
32
    </li>
32
    </li>
33
    <li><a href="/cgi-bin/koha/serials/add_fields.pl">Add subscription fields</a></li>
33
    <li><a href="/cgi-bin/koha/serials/add_fields.pl">Add subscription fields</a></li>
34
    [% IF Koha.Preference('Mana') %]
35
        <li><a href="/cgi-bin/koha/serials/serials-search.pl?mana=1">Search on Mana</a></li>
36
    [% END %]
34
</ul>
37
</ul>
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-toolbar.inc (+108 lines)
Lines 13-18 Link Here
13
            window.location="subscription-detail.pl?subscriptionid=[% subscriptionid %]&op=reopen";
13
            window.location="subscription-detail.pl?subscriptionid=[% subscriptionid %]&op=reopen";
14
        }
14
        }
15
    }
15
    }
16
    function share() {
17
        window.location="subscription-detail.pl?subscriptionid=[% subscriptionid %]&op=share";
18
    }
16
19
17
	 $(document).ready(function() {
20
	 $(document).ready(function() {
18
        $("#deletesub").click(function(){
21
        $("#deletesub").click(function(){
Lines 43-48 Link Here
43
            [% ELSE %]
46
            [% ELSE %]
44
                <div class="btn-group"><a id="newsubscription" class="btn btn-default btn-sm" href="/cgi-bin/koha/serials/subscription-add.pl"><i class="fa fa-plus"></i> New subscription</a></div>
47
                <div class="btn-group"><a id="newsubscription" class="btn btn-default btn-sm" href="/cgi-bin/koha/serials/subscription-add.pl"><i class="fa fa-plus"></i> New subscription</a></div>
45
            [% END %]
48
            [% END %]
49
            [% IF Koha.Preference('Mana') %]
50
                [% IF one_language_enabled==0 or mana_id %]
51
                    <div class="btn-group"><a data-toggle="modal" data-toggle="tooltip" title="Your email address will be associated to your sharing." data-target="#mana_share_modal" class="btn btn-small"><i class="fa fa-share-alt"></i> Share</a></div>
52
                [% ELSE %]
53
                    <div class="btn-group" data-toggle="tooltip" title="Your email address will be associated to your sharing."><a class="btn btn-small" onclick="share()"><i class="fa fa-share-alt"></i> Share</a></div>
54
                [% END %]
55
            [% END %]
46
        [% END %]
56
        [% END %]
47
57
48
        [% IF ( CAN_user_serials_edit_subscription || CAN_user_serials_create_subscription || CAN_user_serials_delete_subscription ) %]
58
        [% IF ( CAN_user_serials_edit_subscription || CAN_user_serials_create_subscription || CAN_user_serials_delete_subscription ) %]
Lines 99-101 Link Here
99
        [% END %]
109
        [% END %]
100
    </div>
110
    </div>
101
[% END %]
111
[% END %]
112
113
<div id="mana_share_modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="mana_share_modal_label" style="display: none;">
114
    <div class="modal-dialog">
115
        <div class="modal-content">
116
            <div class="modal-header">
117
                <h3 id="mana_share_modal_label">Share [% bibliotitle %] to Mana</h3>
118
            </div>
119
            <div class="modal-body">
120
                [% IF (mana_id) %]
121
                    <div class="alert">
122
                        <p>Your subscription is already linked with a Mana subscription model. Share it if you have made modifications, otherwide it will do nothing.</p>
123
                    </div>
124
                [% END %]
125
                [% IF ( languages_loop ) %]
126
                    [% UNLESS ( one_language_enabled ) %]
127
                        <div class="rows">
128
                            <p>The frequency and the numberpattern of [% bibliotitle %] are :</p>
129
                            <ol>
130
                                <li><span class="label">Frequency : </span>
131
                                        [% frequency.description %]
132
                                </li>
133
                                <li><span class="label">Number pattern : </span>
134
                                    [% numberpattern.label %]
135
                                </li>
136
                            </ol>
137
                        </div>
138
                        <div class="rows">
139
                            <form method="get" id="mana_share_form" action="/cgi-bin/koha/serials/subscription-detail.pl" class="validated" >
140
                                <fieldset>
141
                                    <label for="mana_language">Language of your sharing :</label>
142
                                    <select id="mana_language" name="mana_language">
143
                                        [% FOREACH languages_loo IN languages_loop %]
144
                                            [% IF ( languages_loo.group_enabled ) %]
145
                                                [% IF ( languages_loo.plural ) %]
146
                                                    [% FOREACH sublanguages_loo IN languages_loo.sublanguages_loop %]
147
                                                        [% IF ( sublanguages_loo.enabled ) %]
148
                                                            [% IF ( sublanguages_loo.sublanguage_current ) %]
149
                                                                <option value="[% languages_loo.rfc4646_subtag %]" selected>
150
                                                                    [% sublanguages_loo.native_description %]
151
                                                                    [% sublanguages_loo.script_description %]
152
                                                                    [% sublanguages_loo.region_description %]
153
                                                                    [% sublanguages_loo.variant_description %]
154
                                                                    ([% sublanguages_loo.rfc4646_subtag %])
155
                                                                </option>
156
                                                            [% ELSE %]
157
                                                                <option value="[% languages_loo.rfc4646_subtag %]">
158
                                                                    [% sublanguages_loo.native_description %]
159
                                                                    [% sublanguages_loo.script_description %]
160
                                                                    [% sublanguages_loo.region_description %]
161
                                                                    [% sublanguages_loo.variant_description %]
162
                                                                    ([% sublanguages_loo.rfc4646_subtag %])
163
                                                                </option>
164
                                                            [% END %]
165
                                                        [% END %]
166
                                                    [% END %]
167
                                                [% ELSE %]
168
                                                    [% IF ( languages_loo.group_enabled ) %]
169
                                                        [% IF ( languages_loo.current ) %]
170
                                                            <option value="[% languages_loo.rfc4646_subtag %]" selected>
171
                                                                [% IF ( languages_loo.native_description ) %]
172
                                                                    [% languages_loo.native_description %]
173
                                                                [% ELSE %]
174
                                                                    [% languages_loo.rfc4646_subtag %]
175
                                                                [% END %]
176
                                                            </option>
177
                                                        [% ELSE %]
178
                                                            <option value="[% languages_loo.rfc4646_subtag %]">
179
                                                                [% IF ( languages_loo.native_description ) %]
180
                                                                    [% languages_loo.native_description %]
181
                                                                [% ELSE %]
182
                                                                    [% languages_loo.rfc4646_subtag %]
183
                                                                [% END %]
184
                                                            </option>
185
                                                        [% END %]
186
                                                    [% END %]
187
                                                [% END %]
188
                                            [% END %]
189
                                        [% END %]
190
                                    </select>
191
                                    <input type="hidden" id="op" name="op" value="share"/>
192
                                    <input type="hidden" id="subscriptionid" name="subscriptionid" value="[% subscriptionid %]"/>
193
                                </fieldset>
194
                            </form>
195
                        </div>
196
                    [% END %]
197
                [% END %]
198
            </div>
199
            <div class="modal-footer">
200
                <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
201
                [% IF one_language_enabled==0 %]
202
                    <button type="submit" form="mana_share_form" class="btn btn-primary">Share</button>
203
                [% ELSE %]
204
                    <div class="btn-group"><a class="btn btn-primary" onclick="share()">Share</a></div>
205
                [% END %]
206
            </div>
207
        </div>
208
    </div>
209
</div>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/mana-subscription-search-result.tt (+1 lines)
Line 0 Link Here
1
[% INCLUDE 'mana-subscription-search-result.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-home.tt (+1 lines)
Lines 1-5 Link Here
1
[% INCLUDE 'doc-head-open.inc' %]
1
[% INCLUDE 'doc-head-open.inc' %]
2
[% USE KohaDates %]
2
[% USE KohaDates %]
3
[% USE Koha %]
3
<title>Koha &rsaquo; Serials [% biblionumber %]</title>
4
<title>Koha &rsaquo; Serials [% biblionumber %]</title>
4
[% INCLUDE 'doc-head-close.inc' %]
5
[% INCLUDE 'doc-head-close.inc' %]
5
</head>
6
</head>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt (-7 / +42 lines)
Lines 1-6 Link Here
1
[% USE Branches %]
1
[% USE Branches %]
2
[% INCLUDE 'doc-head-open.inc' %]
2
[% INCLUDE 'doc-head-open.inc' %]
3
[% USE KohaDates %]
3
[% USE KohaDates %]
4
[% USE Koha %]
4
[% USE AuthorisedValues %]
5
[% USE AuthorisedValues %]
5
<title>Koha &rsaquo; Serials [% biblionumber %]</title>
6
<title>Koha &rsaquo; Serials [% biblionumber %]</title>
6
[% INCLUDE 'doc-head-close.inc' %]
7
[% INCLUDE 'doc-head-close.inc' %]
Lines 10-15 Link Here
10
<script type="text/javascript">
11
<script type="text/javascript">
11
//<![CDATA[
12
//<![CDATA[
12
 $(document).ready(function() {
13
 $(document).ready(function() {
14
    var manarlt = $("#mana_results_datatable").dataTable($.extend(true, {}, dataTablesDefaults, {
15
        "sPaginationType": "four_button",
16
        "aoColumnDefs": [
17
            { 'bSortable': false, "bSearchable": false, 'aTargets': [ 'NoSort' ] },
18
            { "sType": "title-string", "aTargets" : [ "title-string" ] },
19
            { 'sType': "anti-the", 'aTargets' : [ 'anti-the'] }
20
        ]
21
    } ) );
13
    var osrlt = $("#osrlt").dataTable($.extend(true, {}, dataTablesDefaults, {
22
    var osrlt = $("#osrlt").dataTable($.extend(true, {}, dataTablesDefaults, {
14
        "sPaginationType": "four_button",
23
        "sPaginationType": "four_button",
15
        "aoColumnDefs": [
24
        "aoColumnDefs": [
Lines 28-33 Link Here
28
        ]
37
        ]
29
    } ) );
38
    } ) );
30
39
40
    manarlt.fnAddFilters("dt-filter", 750);
31
    osrlt.fnAddFilters("dt-filter", 750);
41
    osrlt.fnAddFilters("dt-filter", 750);
32
    csrlt.fnAddFilters("dt-filter", 750);
42
    csrlt.fnAddFilters("dt-filter", 750);
33
43
Lines 35-40 Link Here
35
    $("#reopensub").click(function(){
45
    $("#reopensub").click(function(){
36
      return confirm(_("Are you sure you want to reopen this subscription?"));
46
      return confirm(_("Are you sure you want to reopen this subscription?"));
37
    });
47
    });
48
    [% IF ( mana ) %]
49
        $("label[for=callnumber], input#callnumber").hide();
50
        $("label[for=bookseller], input#bookseller").hide();
51
        $("label[for=branch], select#branch").hide();
52
        $("label[for=to], input#to").hide();
53
        $(".ui-datepicker-trigger").hide();
54
        $("label[for=location], select#location_filter").hide();
55
        [% FOR field IN additional_fields_for_subscription %]
56
              $("label[for=additional_field_[% field.id %]], input#additional_field_[% field.id %]").hide();
57
        [% END %]
58
    [% END %]
38
 });
59
 });
39
 //]]>
60
 //]]>
40
</script>
61
</script>
Lines 123-128 Link Here
123
                [% END %]
144
                [% END %]
124
              </ol>
145
              </ol>
125
              <input type="hidden" name="searched" value="1" />
146
              <input type="hidden" name="searched" value="1" />
147
              [% IF ( mana ) %]<input type="hidden" name="mana" value="1" />[% END %]
126
              <fieldset class="action">
148
              <fieldset class="action">
127
                <input type="submit" value="Search" />
149
                <input type="submit" value="Search" />
128
              </fieldset>
150
              </fieldset>
Lines 130-142 Link Here
130
        </form>
152
        </form>
131
      </div>
153
      </div>
132
      [% END %]
154
      [% END %]
133
      [% IF ( done_searched ) %]
155
            [% IF ( done_searched ) %]
134
        [% IF ( total ) %]
156
                [% IF ( total ) %]
135
          <div id="serialstabs" class="toptabs" style="clear:both;">
157
                    <div id="serialstabs" class="toptabs" style="clear:both;">
136
            <ul class="ui-tabs-nav">
158
                        <ul class="ui-tabs-nav">
137
              <li><a href="#opened">Open ([% openedsubscriptions.size || 0 %])</a></li>
159
                            [% IF mana %]
138
              <li><a href="#closed">Closed ([% closedsubscriptions.size || 0 %])</a></li>
160
                                <li><a href="#mana">Mana ([% total || 0 %])</a></li>
139
            </ul>
161
                            [% ELSE %]
162
                                <li><a href="#opened">Open ([% openedsubscriptions.size || 0 %])</a></li>
163
                                <li><a href="#closed">Closed ([% closedsubscriptions.size || 0 %])</a></li>
164
                            [% END %]
165
                        </ul>
166
                        [% IF mana %]
167
                            <div id="mana">
168
                                [% INCLUDE 'mana-subscription-search-result.inc' %]
169
                            </div>
170
                        [% ELSE %]
140
            <div id="opened">
171
            <div id="opened">
141
              [% IF openedsubscriptions %]
172
              [% IF openedsubscriptions %]
142
                <table id="osrlt">
173
                <table id="osrlt">
Lines 354-359 Link Here
354
                </div>
385
                </div>
355
              [% END %]
386
              [% END %]
356
            </div>
387
            </div>
388
            [% END %]
357
          </div>
389
          </div>
358
        [% ELSE %]
390
        [% ELSE %]
359
            <div class="dialog message">
391
            <div class="dialog message">
Lines 367-372 Link Here
367
  <div class="yui-b">
399
  <div class="yui-b">
368
    [% INCLUDE 'serials-menu.inc' %]
400
    [% INCLUDE 'serials-menu.inc' %]
369
    [% IF ( done_searched ) %]
401
    [% IF ( done_searched ) %]
402
    [% UNLESS ( mana ) %]
370
    <div id="advsearch">
403
    <div id="advsearch">
371
        <form action="/cgi-bin/koha/serials/serials-search.pl" method="get">
404
        <form action="/cgi-bin/koha/serials/serials-search.pl" method="get">
372
          <fieldset class="brief">
405
          <fieldset class="brief">
Lines 439-448 Link Here
439
              <fieldset class="action">
472
              <fieldset class="action">
440
                <input type="submit" value="Search" />
473
                <input type="submit" value="Search" />
441
              </fieldset>
474
              </fieldset>
475
442
            </div>
476
            </div>
443
          </fieldset>
477
          </fieldset>
444
        </form>
478
        </form>
445
      [% END %]
479
      [% END %]
480
    [% END %]
446
  </div>
481
  </div>
447
</div>
482
</div>
448
[% INCLUDE 'intranet-bottom.inc' %]
483
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt (-24 / +193 lines)
Lines 1-5 Link Here
1
[% USE KohaDates %]
1
[% USE KohaDates %]
2
[% USE Branches %]
2
[% USE Branches %]
3
[% USE Koha %]
3
4
4
[% INCLUDE 'doc-head-open.inc' %]
5
[% INCLUDE 'doc-head-open.inc' %]
5
<title>Koha &rsaquo; Serials &rsaquo; [% IF ( modify ) %][% bibliotitle |html %] &rsaquo; Modify subscription[% ELSE %]New subscription[% END %]</title>
6
<title>Koha &rsaquo; Serials &rsaquo; [% IF ( modify ) %][% bibliotitle |html %] &rsaquo; Modify subscription[% ELSE %]New subscription[% END %]</title>
Lines 11-21 fieldset.rows li.radio { width: 100%; } /* override staff-global.css */ Link Here
11
    width: 300px;  /* not enough for IE7 apparently */
12
    width: 300px;  /* not enough for IE7 apparently */
12
}
13
}
13
</style>
14
</style>
15
<link rel="stylesheet" type="text/css" href="[% interface %]/[% theme %]/css/datatables.css" />
16
[% INCLUDE 'datatables.inc' %]
14
<script type="text/javascript">
17
<script type="text/javascript">
15
//<![CDATA[
18
//<![CDATA[
16
19
17
var globalnumpatterndata;
20
var globalnumpatterndata;
18
var globalfreqdata;
21
var globalfreqdata;
22
var mananumpatterndata;
23
var manafreqdata;
24
var manaid;
19
var advancedpatternlocked;
25
var advancedpatternlocked;
20
var patternneedtobetested = 0;
26
var patternneedtobetested = 0;
21
[% IF ( irregularity ) %]patternneedtobetested = 1;[% END %]
27
[% IF ( irregularity ) %]patternneedtobetested = 1;[% END %]
Lines 98-128 function Check_page2(){ Link Here
98
}
104
}
99
105
100
function frequencyload(){
106
function frequencyload(){
101
    $.getJSON("subscription-frequency.pl",{"frequency_id":document.f.frequency.value,ajax:'true'},
107
    if ($("#frequency option:selected").val() === "mana"){
102
        function(freqdata){
108
        globalfreqdata=manafreqdata;
103
            globalfreqdata=freqdata;
109
        $("input[name='sfdescription']").val(manafreqdata.description);
104
            if ( globalfreqdata.unit && globalfreqdata.unit.length == 0 ) {
110
        $("input[name='unit']").val(manafreqdata.unit);
105
                var option = $("#subtype option[value='issues']");
111
        $("input[name='unitsperissue']").val(manafreqdata.unitsperissue);
106
                $(option).attr('selected', 'selected');
112
        $("input[name='issuesperunit']").val(manafreqdata.issuesperunit);
107
                $("#subtype option[value!='issues']").prop('disabled', true)
113
        if ($( "#numberpattern option:selected" ).val() === "mana" ) {
108
            } else {
114
            $("input[name='mana_id']").val(manaid);
109
                $("#subtype option").prop('disabled', false)
110
            }
111
        }
115
        }
112
    )
116
    } else {
117
        $.getJSON("subscription-frequency.pl",{"frequency_id":document.f.frequency.value,ajax:'true'},
118
            function(freqdata){
119
                globalfreqdata=freqdata;
120
                if ( globalfreqdata.unit && globalfreqdata.unit.length == 0 ) {
121
                    var option = $("#subtype option[value='issues']");
122
                    $(option).attr('selected', 'selected');
123
                    $("#subtype option[value!='issues']").prop('disabled', true);
124
                } else {
125
                    $("#subtype option").prop('disabled', false);
126
                }
127
            }
128
        );
129
        $("input[name='mana_id']").val("");
130
    }
113
}
131
}
114
132
115
function numberpatternload(){
133
function numberpatternload(){
116
    $.getJSON("subscription-numberpattern.pl",{"numberpattern_id":document.f.numbering_pattern.value,ajax:'true'},
134
    if($("#numberpattern option:selected" ).val() === "mana"){
117
        function(numpatterndata){
135
        globalnumpatterndata=mananumpatterndata;
118
            globalnumpatterndata=numpatterndata;
136
        $("input[name='sndescription']").val(mananumpatterndata.description);
119
            if (globalnumpatterndata==undefined){
137
        if($("#frequency option:selected" ).val() === "mana"){
120
                return false;
138
            $("input[name='mana_id']").val(manaid);
121
            }
139
        }
122
            displaymoreoptions();
140
        if (globalnumpatterndata==undefined){
123
            restoreAdvancedPattern();
141
            return false;
124
        }
142
        }
125
    );
143
        displaymoreoptions();
144
        restoreAdvancedPattern();
145
    } else {
146
        $.getJSON("subscription-numberpattern.pl",{"numberpattern_id":document.f.numbering_pattern.value,ajax:'true'},
147
            function(numpatterndata){
148
                globalnumpatterndata=numpatterndata;
149
                if (globalnumpatterndata==undefined){
150
                    return false;
151
                }
152
                displaymoreoptions();
153
                restoreAdvancedPattern();
154
            }
155
        );
156
        $("input[name='mana_id']").val("");
157
    }
126
}
158
}
127
159
128
function displaymoreoptions() {
160
function displaymoreoptions() {
Lines 285-291 function testPredictionPattern() { Link Here
285
        'lastvalue1', 'lastvalue2', 'lastvalue3', 'add1', 'add2', 'add3',
317
        'lastvalue1', 'lastvalue2', 'lastvalue3', 'add1', 'add2', 'add3',
286
        'every1', 'every2', 'every3', 'innerloop1', 'innerloop2', 'innerloop3',
318
        'every1', 'every2', 'every3', 'innerloop1', 'innerloop2', 'innerloop3',
287
        'setto1', 'setto2', 'setto3', 'numbering1', 'numbering2', 'numbering3',
319
        'setto1', 'setto2', 'setto3', 'numbering1', 'numbering2', 'numbering3',
288
        'whenmorethan1', 'whenmorethan2', 'whenmorethan3', 'locale'
320
        'whenmorethan1', 'whenmorethan2', 'whenmorethan3', 'locale', 'sfdescription',
321
        'unitsperissue', 'issuesperunit', 'unit'
289
    ];
322
    ];
290
    for(i in ajaxParams) {
323
    for(i in ajaxParams) {
291
        var param = ajaxParams[i];
324
        var param = ajaxParams[i];
Lines 298-304 function testPredictionPattern() { Link Here
298
        url:"/cgi-bin/koha/serials/showpredictionpattern.pl",
331
        url:"/cgi-bin/koha/serials/showpredictionpattern.pl",
299
        data: ajaxData,
332
        data: ajaxData,
300
        success: function(data) {
333
        success: function(data) {
301
            $("#displayexample").html(data);
334
            $("#displayexample").html(data).show();
302
            patternneedtobetested = 0;
335
            patternneedtobetested = 0;
303
        }
336
        }
304
    });
337
    });
Lines 372-379 function show_page_2() { Link Here
372
    displaymoreoptions();
405
    displaymoreoptions();
373
}
406
}
374
407
408
function mana_search() {
409
    $.ajax({
410
        type: "POST",
411
        url: "/cgi-bin/koha/svc/mana/search",
412
        data: {biblionumber : $("#biblionumber").val()},
413
        dataType: "html",
414
    })
415
    .done( function( result ) {
416
    $("#mana_search_result .modal-body").html(result);
417
        $("#mana_search_result_label").text("Results from Mana");
418
        $("#mana_results_datatable").dataTable($.extend(true, {}, dataTablesDefaults, {
419
            "sPaginationType": "four_button",
420
            "aoColumnDefs": [
421
                { 'bSortable': false, "bSearchable": false, 'aTargets': [ 'NoSort' ] },
422
                { "sType": "title-string", "aTargets" : [ "title-string" ] },
423
                { 'sType': "anti-the", 'aTargets' : [ 'anti-the'] }
424
            ]
425
        }));
426
        if($("td.dataTables_empty").length == 0){
427
            $("#mana_search").show();
428
        }
429
    }).fail(function(result){
430
    });
431
}
432
433
function mana_use(mana_id){
434
    $("tr").removeClass("selected");
435
    $("#row"+mana_id).addClass("selected");
436
    $.ajax( {
437
        type: "POST",
438
        url: "/cgi-bin/koha/svc/mana/use",
439
        data: {id : mana_id},
440
        dataType: "json",
441
    })
442
    .done(function(result){
443
        var select = document.getElementById('numberpattern');
444
        for(i = 0; i < select.length; i++){
445
            if(select[i].value === "mana"){
446
                select.remove(i);
447
            }
448
        }
449
        var optionnumpattern = document.createElement("option");
450
        optionnumpattern.text = result.label + " (mana)";
451
        optionnumpattern.selected = true;
452
        optionnumpattern.value="mana";
453
        select.add(optionnumpattern);
454
455
        mananumpatterndata = {
456
            id:"mana",
457
            add1:result.add1,
458
            add2:result.add2,
459
            add3:result.add3,
460
            description:result.sndescription,
461
            displayorder:result.displayorder,
462
            every1:result.every1,
463
            every2:result.every2,
464
            every3:result.every3,
465
            label:result.label,
466
            label1:result.label1,
467
            label2:result.label2,
468
            label3:result.label3,
469
            numbering1:result.numbering1,
470
            numbering2:result.numbering2,
471
            numbering3:result.numbering3,
472
            numberingmethod:result.numberingmethod,
473
            setto1:result.setto1,
474
            setto2:result.setto2,
475
            setto3:result.setto3,
476
            whenmorethan1:result.whenmorethan1,
477
            whenmorethan2:result.whenmorethan2,
478
            whenmorethan3:result.whenmorethan3,
479
        };
480
        select = document.getElementById("frequency");
481
        for(i = 0; i < select.length; i++){
482
            if(select[i].value === "mana"){
483
                select.remove(i);
484
            }
485
        }
486
        var optionfreq = document.createElement("option");
487
        optionfreq.text = result.sfdescription + " (mana)";
488
        optionfreq.selected = true;
489
        optionfreq.value="mana";
490
        select.add(optionfreq);
491
        manafreqdata = {
492
            id:"mana",
493
            description:result.sfdescription,
494
            displayorder:result.displayorder,
495
            issuesperunit:result.issuesperunit,
496
            unit:result.unit,
497
            unitsperissue:result.unitsperissue,
498
        };
499
        manaid = result.id;
500
        $("input[name='mana_id']").val(manaid);
501
        $("#mana_search_result").modal("hide");
502
        frequencyload();
503
        numberpatternload();
504
    }).fail( function( result ){
505
    });
506
}
507
508
function removeDisabledAttr() {
509
    $('select:disabled').removeAttr('disabled');
510
}
511
375
512
376
$(document).ready(function() {
513
$(document).ready(function() {
514
    $("#displayexample").hide();
515
    $("#mana_search_result").modal("hide");
377
    $("#aqbooksellerid").on('keypress', function(e) {
516
    $("#aqbooksellerid").on('keypress', function(e) {
378
        if (e.keyCode == 13) {
517
        if (e.keyCode == 13) {
379
            e.preventDefault();
518
            e.preventDefault();
Lines 456-461 $(document).ready(function() { Link Here
456
        }
595
        }
457
    [% END %]
596
    [% END %]
458
597
598
    $("#mana_search").hide();
599
459
    show_page_1();
600
    show_page_1();
460
    $("#subscription_add_form").on("submit",function(){
601
    $("#subscription_add_form").on("submit",function(){
461
        return Check_page2();
602
        return Check_page2();
Lines 477-483 $(document).ready(function() { Link Here
477
        }
618
        }
478
    });
619
    });
479
    $("#subscription_add_next").on("click",function(){
620
    $("#subscription_add_next").on("click",function(){
480
        if ( Check_page1() ){
621
        if ( Check_page1() ) {
622
            [% IF Koha.Preference('Mana') %]
623
                mana_search();
624
            [% END %]
481
            show_page_2();
625
            show_page_2();
482
        }
626
        }
483
    });
627
    });
Lines 701-706 $(document).ready(function() { Link Here
701
845
702
                <div id="page_2">
846
                <div id="page_2">
703
                    <div class="yui-u first">
847
                    <div class="yui-u first">
848
                        <div id="mana_search" class="dialog message">
849
                            <p>Frequency and Numbering pattern have been already proposed for this subscription on Mana. To show results, click <a style="cursor:pointer" data-toggle="modal" data-target="#mana_search_result">Here</a></p>
850
                        </div>
704
                        <div id="subscription_form_planning">
851
                        <div id="subscription_form_planning">
705
                            <fieldset class="rows">
852
                            <fieldset class="rows">
706
                                <legend>Serials planning</legend>
853
                                <legend>Serials planning</legend>
Lines 965-974 $(document).ready(function() { Link Here
965
                              </div>
1112
                              </div>
966
                            [% END %]
1113
                            [% END %]
967
1114
1115
                            <input type="hidden" id="mana_id"  name="mana_id" value=""/>
1116
                            <input type="hidden" id="sndescription"  name="sndescription" value=""/>
1117
                            <input type="hidden" id="sfdescription"  name="sfdescription" value=""/>
1118
                            <input type="hidden" id="unit"  name="unit" value=""/>
1119
                            <input type="hidden" id="unitsperissue"  name="unitsperissue" value=""/>
1120
                            <input type="hidden" id="issuesperunit"  name="issuesperunit" value=""/>
968
                            <fieldset class="action">
1121
                            <fieldset class="action">
969
                                <input type="button" id="subscription_add_previous" value="&lt;&lt; Previous" style="float:left;"/>
1122
                                <input type="button" id="subscription_add_previous" value="&lt;&lt; Previous" style="float:left;"/>
970
                                <input id="testpatternbutton" type="button" value="Test prediction pattern" />
1123
                                <input id="testpatternbutton" type="button" value="Test prediction pattern" />
971
                                <input type="submit" value="Save subscription" style="float:right;" accesskey="w" />
1124
                                <input type="submit" onclick="removeDisabledAttr()" value="Save subscription" style="float:right;" accesskey="w"/>
972
                            </fieldset>
1125
                            </fieldset>
973
                        </div>
1126
                        </div>
974
                    </div>
1127
                    </div>
Lines 981-984 $(document).ready(function() { Link Here
981
    </div>
1134
    </div>
982
</div>
1135
</div>
983
1136
1137
<div id="mana_search_result" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="mana_search_result_label" style="width: 90%; left:5%; margin-left: auto; display: none;">
1138
    <div class="modal-dialog modal-lg">
1139
        <div class="modal-content">
1140
            <div class="modal-header">
1141
                <h3 id="mana_search_result_label"></h3>
1142
            </div>
1143
            <div class="modal-body">
1144
            </div>
1145
            <div class="modal-footer">
1146
                <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
1147
            </div>
1148
        </div>
1149
    </div>
1150
</div>
1151
1152
984
[% INCLUDE 'intranet-bottom.inc' %]
1153
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-detail.tt (-2 / +14 lines)
Lines 1-6 Link Here
1
[% USE Koha %]
1
[% USE Koha %]
2
[% USE Branches %]
2
[% USE Branches %]
3
[% USE AuthorisedValues %]
3
[% USE AuthorisedValues %]
4
[% USE Koha %]
4
[% INCLUDE 'doc-head-open.inc' %]
5
[% INCLUDE 'doc-head-open.inc' %]
5
<title>Koha &rsaquo; Serials &rsaquo; Details for subscription #[% subscriptionid %]</title>
6
<title>Koha &rsaquo; Serials &rsaquo; Details for subscription #[% subscriptionid %]</title>
6
[% INCLUDE 'doc-head-close.inc' %]
7
[% INCLUDE 'doc-head-close.inc' %]
Lines 41-47 $(document).ready(function() { Link Here
41
   <div id="bd">
42
   <div id="bd">
42
	<div id="yui-main">
43
	<div id="yui-main">
43
	<div class="yui-b">
44
	<div class="yui-b">
44
	[% INCLUDE 'serials-toolbar.inc' %]
45
    [% INCLUDE 'serials-toolbar.inc' mana_id = mana_id %]
45
46
46
    <h1>Subscription for [% bibliotitle%] [% IF closed %](closed)[% END %]</h1>
47
    <h1>Subscription for [% bibliotitle%] [% IF closed %](closed)[% END %]</h1>
47
    [% IF ( abouttoexpire ) %]
48
    [% IF ( abouttoexpire ) %]
Lines 70-76 $(document).ready(function() { Link Here
70
			</form>
71
			</form>
71
72
72
	</div>
73
	</div>
73
	[% END %] <!-- NEEDSCONFIRMATION -->
74
    [% END %] <!-- NEEDSCONFIRMATION -->
75
    [% IF mana_code.defined %]
76
        <div id="alert-community" class="dialog message">
77
            <p>
78
                [% IF (mana_code == 201) %]
79
                    The export is done, thank you for your contribution.
80
                [% ELSIF (mana_code == 200) %]
81
                    The model already exists on Mana, thank you for your contribution.
82
                [% END %]
83
            </p>
84
        </div>
85
    [% END %]
74
86
75
<div id="subscription_description" class="toptabs">
87
<div id="subscription_description" class="toptabs">
76
<ul class="ui-tabs-nav">
88
<ul class="ui-tabs-nav">
(-)a/misc/cronjobs/serialsUpdate.pl (-1 / +3 lines)
Lines 33-38 use C4::Debug; Link Here
33
use C4::Serials;
33
use C4::Serials;
34
use C4::Log;
34
use C4::Log;
35
use Koha::DateUtils;
35
use Koha::DateUtils;
36
use C4::Serials::Frequency;
36
37
37
use Date::Calc qw/Date_to_Days check_date/;
38
use Date::Calc qw/Date_to_Days check_date/;
38
use Getopt::Long;
39
use Getopt::Long;
Lines 118-124 while ( my $issue = $sth->fetchrow_hashref ) { Link Here
118
    my $publisheddate  = $issue->{publisheddate};
119
    my $publisheddate  = $issue->{publisheddate};
119
120
120
    if ( $subscription && $publisheddate && $publisheddate ne "0000-00-00" ) {
121
    if ( $subscription && $publisheddate && $publisheddate ne "0000-00-00" ) {
121
        my $nextpublisheddate = GetNextDate( $subscription, $publisheddate );
122
        my $freqdata = GetSubscriptionFrequency($subscription->{'periodicity'});
123
        my $nextpublisheddate = GetNextDate( $subscription, $publisheddate, $freqdata );
122
        my $today = output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 });
124
        my $today = output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 });
123
125
124
        if ( $nextpublisheddate && $today ) {
126
        if ( $nextpublisheddate && $today ) {
(-)a/serials/serials-collection.pl (-2 / +4 lines)
Lines 74-87 if($op eq 'gennext' && @subscriptionid){ Link Here
74
            require C4::Serials::Numberpattern;
74
            require C4::Serials::Numberpattern;
75
            my $subscription = GetSubscription($subscriptionid);
75
            my $subscription = GetSubscription($subscriptionid);
76
            my $pattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($subscription->{numberpattern});
76
            my $pattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($subscription->{numberpattern});
77
            my $frequency = C4::Serials::Frequency::GetSubscriptionFrequencies($subscription->{periodicity});
77
            my $expected = GetNextExpected($subscriptionid);
78
            my $expected = GetNextExpected($subscriptionid);
78
            my (
79
            my (
79
                 $newserialseq,  $newlastvalue1, $newlastvalue2, $newlastvalue3,
80
                 $newserialseq,  $newlastvalue1, $newlastvalue2, $newlastvalue3,
80
                 $newinnerloop1, $newinnerloop2, $newinnerloop3
81
                 $newinnerloop1, $newinnerloop2, $newinnerloop3
81
            ) = GetNextSeq($subscription, $pattern, $expected->{publisheddate});
82
            ) = GetNextSeq($subscription, $pattern, $frequency, $expected->{publisheddate});
82
83
83
             ## We generate the next publication date
84
             ## We generate the next publication date
84
             my $nextpublisheddate = GetNextDate($subscription, $expected->{publisheddate}, 1);
85
             my $frequency = C4::Serials::Frequency::GetSubscriptionFrequency($subscription->{periodicity});
86
             my $nextpublisheddate = GetNextDate($subscription, $expected->{publisheddate}, $frequency, 1);
85
             ## Creating the new issue
87
             ## Creating the new issue
86
             NewIssue( $newserialseq, $subscriptionid, $subscription->{'biblionumber'},
88
             NewIssue( $newserialseq, $subscriptionid, $subscription->{'biblionumber'},
87
                     1, $nextpublisheddate, $nextpublisheddate );
89
                     1, $nextpublisheddate, $nextpublisheddate );
(-)a/serials/serials-search.pl (-36 / +86 lines)
Lines 38-43 use C4::Serials; Link Here
38
use Koha::AdditionalField;
38
use Koha::AdditionalField;
39
39
40
use Koha::DateUtils;
40
use Koha::DateUtils;
41
use Koha::SharedContent;
41
42
42
my $query         = new CGI;
43
my $query         = new CGI;
43
my $title         = $query->param('title_filter') || '';
44
my $title         = $query->param('title_filter') || '';
Lines 52-57 my $location = $query->param('location_filter') || ''; Link Here
52
my $expiration_date = $query->param('expiration_date_filter') || '';
53
my $expiration_date = $query->param('expiration_date_filter') || '';
53
my $routing       = $query->param('routing') || C4::Context->preference("RoutingSerials");
54
my $routing       = $query->param('routing') || C4::Context->preference("RoutingSerials");
54
my $searched      = $query->param('searched') || 0;
55
my $searched      = $query->param('searched') || 0;
56
my $mana      = $query->param('mana') || 0;
55
my @subscriptionids = $query->multi_param('subscriptionid');
57
my @subscriptionids = $query->multi_param('subscriptionid');
56
my $op            = $query->param('op');
58
my $op            = $query->param('op');
57
59
Lines 95-101 for my $field ( @$additional_fields ) { Link Here
95
my $expiration_date_dt = $expiration_date ? dt_from_string( $expiration_date ) : undef;
97
my $expiration_date_dt = $expiration_date ? dt_from_string( $expiration_date ) : undef;
96
my @subscriptions;
98
my @subscriptions;
97
if ($searched){
99
if ($searched){
98
    @subscriptions = SearchSubscriptions(
100
    if ($mana) {
101
        my $result = Koha::SharedContent::manaGetRequest("subscription",{
102
            title        => $title,
103
            issn         => $ISSN,
104
            ean          => $EAN,
105
            publisher    => $publisher
106
        });
107
        @subscriptions = @{ $result->{data} };
108
    }
109
    else {
110
        @subscriptions = SearchSubscriptions(
99
        {
111
        {
100
            biblionumber => $biblionumber,
112
            biblionumber => $biblionumber,
101
            title        => $title,
113
            title        => $title,
Lines 108-153 if ($searched){ Link Here
108
            additional_fields => [ map{ { name => $_, value => $additional_field_filters->{$_}{value}, authorised_value_category => $additional_field_filters->{$_}{authorised_value_category} } } keys %$additional_field_filters ],
120
            additional_fields => [ map{ { name => $_, value => $additional_field_filters->{$_}{value}, authorised_value_category => $additional_field_filters->{$_}{authorised_value_category} } } keys %$additional_field_filters ],
109
            location     => $location,
121
            location     => $location,
110
            expiration_date => $expiration_date_dt,
122
            expiration_date => $expiration_date_dt,
111
        }
123
        });
112
    );
124
    }
113
}
125
}
114
126
115
# to toggle between create or edit routing list options
127
if ($mana) {
116
if ($routing) {
128
    $template->param(
117
    for my $subscription ( @subscriptions) {
129
        subscriptions => \@subscriptions,
118
        $subscription->{routingedit} = check_routing( $subscription->{subscriptionid} );
130
        total         => scalar @subscriptions,
119
    }
131
        title_filter  => $title,
132
        ISSN_filter   => $ISSN,
133
        EAN_filter    => $EAN,
134
        callnumber_filter => $callnumber,
135
        publisher_filter => $publisher,
136
        bookseller_filter  => $bookseller,
137
        branch_filter => $branch,
138
        location_filter => $location,
139
        expiration_date_filter => $expiration_date_dt,
140
        done_searched => $searched,
141
        routing       => $routing,
142
        additional_field_filters => $additional_field_filters,
143
        additional_fields_for_subscription => $additional_fields,
144
        marcflavour   => (uc(C4::Context->preference("marcflavour"))),
145
        mana => $mana,
146
        search_only => 1
147
    );
120
}
148
}
149
else
150
{
151
    # to toggle between create or edit routing list options
152
    if ($routing) {
153
        for my $subscription ( @subscriptions) {
154
            $subscription->{routingedit} = check_routing( $subscription->{subscriptionid} );
155
        }
156
    }
121
157
122
my (@openedsubscriptions, @closedsubscriptions);
158
    my (@openedsubscriptions, @closedsubscriptions);
123
for my $sub ( @subscriptions ) {
159
    for my $sub ( @subscriptions ) {
124
    unless ( $sub->{closed} ) {
160
        unless ( $sub->{closed} ) {
125
        push @openedsubscriptions, $sub
161
            push @openedsubscriptions, $sub
126
            unless $sub->{cannotdisplay};
162
                unless $sub->{cannotdisplay};
127
    } else {
163
        } else {
128
        push @closedsubscriptions, $sub
164
            push @closedsubscriptions, $sub
129
            unless $sub->{cannotdisplay};
165
                unless $sub->{cannotdisplay};
166
        }
130
    }
167
    }
131
}
132
168
133
$template->param(
169
    my @branches = Koha::Libraries->search( {}, { order_by => ['branchcode'] } );
134
    openedsubscriptions => \@openedsubscriptions,
170
    my @branches_loop;
135
    closedsubscriptions => \@closedsubscriptions,
171
    foreach my $b ( @branches ) {
136
    total         => @openedsubscriptions + @closedsubscriptions,
172
        my $selected = 0;
137
    title_filter  => $title,
173
        $selected = 1 if( defined $branch and $branch eq $b->branchcode );
138
    ISSN_filter   => $ISSN,
174
        push @branches_loop, {
139
    EAN_filter    => $EAN,
175
            branchcode  => $b->branchcode,
140
    callnumber_filter => $callnumber,
176
            branchname  => $b->branchname,
141
    publisher_filter => $publisher,
177
            selected    => $selected,
142
    bookseller_filter  => $bookseller,
178
        };
143
    branch_filter => $branch,
179
    }
144
    location_filter => $location,
145
    expiration_date_filter => $expiration_date_dt,
146
    done_searched => $searched,
147
    routing       => $routing,
148
    additional_field_filters => $additional_field_filters,
149
    additional_fields_for_subscription => $additional_fields,
150
    marcflavour   => (uc(C4::Context->preference("marcflavour")))
151
);
152
180
181
    $template->param(
182
        openedsubscriptions => \@openedsubscriptions,
183
        closedsubscriptions => \@closedsubscriptions,
184
        total         => @openedsubscriptions + @closedsubscriptions,
185
        title_filter  => $title,
186
        ISSN_filter   => $ISSN,
187
        EAN_filter    => $EAN,
188
        callnumber_filter => $callnumber,
189
        publisher_filter => $publisher,
190
        bookseller_filter  => $bookseller,
191
        branch_filter => $branch,
192
        location_filter => $location,
193
        expiration_date_filter => $expiration_date_dt,
194
        branches_loop => \@branches_loop,
195
        done_searched => $searched,
196
        routing       => $routing,
197
        additional_field_filters => $additional_field_filters,
198
        additional_fields_for_subscription => $additional_fields,
199
        marcflavour   => (uc(C4::Context->preference("marcflavour"))),
200
        mana => $mana
201
    );
202
}
153
output_html_with_http_headers $query, $cookie, $template->output;
203
output_html_with_http_headers $query, $cookie, $template->output;
(-)a/serials/showpredictionpattern.pl (-5 / +18 lines)
Lines 56-62 my $subtype = $input->param('subtype'); Link Here
56
my $sublength = $input->param('sublength');
56
my $sublength = $input->param('sublength');
57
my $custompattern = $input->param('custompattern');
57
my $custompattern = $input->param('custompattern');
58
58
59
my $frequency = GetSubscriptionFrequency($frequencyid);
59
60
my $frequency;
61
if ( $frequencyid eq 'mana' ) {
62
    $frequency = {
63
        'id'            => undef,
64
        'displayorder'  => undef,
65
        'description'   => scalar $input->param('sfdescription') // '',
66
        'unitsperissue' => scalar $input->param('unitsperissue') // '',
67
        'issuesperunit' => scalar $input->param('issuesperunit') // '',
68
        'unit'          => scalar $input->param('unit') // ''
69
    };
70
}
71
else {
72
    $frequency = GetSubscriptionFrequency($frequencyid);
73
}
60
74
61
my %pattern = (
75
my %pattern = (
62
    numberingmethod => scalar $input->param('numberingmethod') // '',
76
    numberingmethod => scalar $input->param('numberingmethod') // '',
Lines 98-111 my %subscription = ( Link Here
98
    innerloop2      => scalar $input->param('innerloop2') // '',
112
    innerloop2      => scalar $input->param('innerloop2') // '',
99
    innerloop3      => scalar $input->param('innerloop3') // '',
113
    innerloop3      => scalar $input->param('innerloop3') // '',
100
    irregularity    => '',
114
    irregularity    => '',
101
    periodicity     => $frequencyid,
102
    countissuesperunit  => 1,
115
    countissuesperunit  => 1,
103
    firstacquidate  => $firstacquidate,
116
    firstacquidate  => $firstacquidate,
104
);
117
);
105
118
106
my $issuenumber;
119
my $issuenumber;
107
if(defined $subscriptionid) {
120
if(defined $subscriptionid) {
108
    ($issuenumber) = C4::Serials::GetFictiveIssueNumber(\%subscription, $date);
121
    ($issuenumber) = C4::Serials::GetFictiveIssueNumber(\%subscription, $date, $frequency);
109
} else {
122
} else {
110
    $issuenumber = 1;
123
    $issuenumber = 1;
111
}
124
}
Lines 135-141 while( $i < 1000 ) { Link Here
135
    my %line;
148
    my %line;
136
149
137
    if(defined $date){
150
    if(defined $date){
138
        $date = GetNextDate(\%subscription, $date);
151
        $date = GetNextDate(\%subscription, $date, $frequency);
139
    }
152
    }
140
    if(defined $date){
153
    if(defined $date){
141
        $line{'publicationdate'} = $date;
154
        $line{'publicationdate'} = $date;
Lines 156-162 while( $i < 1000 ) { Link Here
156
        last;
169
        last;
157
    }
170
    }
158
171
159
    ($calculated, $subscription{'lastvalue1'}, $subscription{'lastvalue2'}, $subscription{'lastvalue3'}, $subscription{'innerloop1'}, $subscription{'innerloop2'}, $subscription{'innerloop3'}) = GetNextSeq(\%subscription, \%pattern);
172
    ($calculated, $subscription{'lastvalue1'}, $subscription{'lastvalue2'}, $subscription{'lastvalue3'}, $subscription{'innerloop1'}, $subscription{'innerloop2'}, $subscription{'innerloop3'}) = GetNextSeq(\%subscription, \%pattern, $frequency);
160
    $issuenumber++;
173
    $issuenumber++;
161
    $line{'number'} = $calculated;
174
    $line{'number'} = $calculated;
162
    $line{'issuenumber'} = $issuenumber;
175
    $line{'issuenumber'} = $issuenumber;
(-)a/serials/subscription-add.pl (-7 / +74 lines)
Lines 35-40 use Koha::DateUtils; Link Here
35
use Koha::ItemTypes;
35
use Koha::ItemTypes;
36
use Carp;
36
use Carp;
37
37
38
use Koha::Subscription::Numberpattern;
39
use Koha::Subscription::Frequency;
40
use Koha::SharedContent;
41
38
#use Smart::Comments;
42
#use Smart::Comments;
39
43
40
our $query = CGI->new;
44
our $query = CGI->new;
Lines 284-298 sub _guess_enddate { Link Here
284
    return $enddate;
288
    return $enddate;
285
}
289
}
286
290
291
sub manage_subscription_numbering_pattern_id {
292
    my $params;
293
    if ( $query->param('numbering_pattern') eq 'mana' ) {
294
        foreach (qw/numberingmethod label1 add1 every1 whenmorethan1 setto1
295
                   numbering1 label2 add2 every2 whenmorethan2 setto2 numbering2
296
                   label3 add3 every3 whenmorethan3 setto3 numbering3/) {
297
            $params->{$_} = $query->param($_) if $query->param($_);
298
        }
299
300
        my $existing = Koha::Subscription::Numberpatterns->search($params)->next();
301
302
        if ($existing) {
303
            return $existing->id;
304
        }
305
306
        $params->{label} = Koha::Subscription::Numberpattern->uniqueLabel($query->param('patternname'));
307
        $params->{description} = $query->param('sndescription');
308
309
310
        my $subscription_np = Koha::Subscription::Numberpattern->new()->set($params)->store();
311
        return $subscription_np->id;
312
    }
313
314
    return $query->param('numbering_pattern');
315
}
316
317
sub manage_subscription_frequencies_id {
318
    my $periodicity;
319
    if ( $query->param('frequency') eq 'mana' ) {
320
        my $subscription_freq = Koha::Subscription::Frequency->new()->set(
321
            {
322
                description   => $query->param('sfdescription'),
323
                unit          => $query->param('unit'),
324
                unitsperissue => $query->param('unitsperissue'),
325
                issuesperunit => $query->param('issuesperunit'),
326
            }
327
        )->store();
328
        $periodicity = $subscription_freq->id;
329
    }
330
    else {
331
        $periodicity = $query->param('frequency');
332
    }
333
    return $periodicity;
334
}
335
287
sub redirect_add_subscription {
336
sub redirect_add_subscription {
337
    my $periodicity = manage_subscription_frequencies_id();
338
    my $numberpattern = manage_subscription_numbering_pattern_id();
339
288
    my $auser          = $query->param('user');
340
    my $auser          = $query->param('user');
289
    my $branchcode     = $query->param('branchcode');
341
    my $branchcode     = $query->param('branchcode');
290
    my $aqbooksellerid = $query->param('aqbooksellerid');
342
    my $aqbooksellerid = $query->param('aqbooksellerid');
291
    my $cost           = $query->param('cost');
343
    my $cost           = $query->param('cost');
292
    my $aqbudgetid     = $query->param('aqbudgetid');
344
    my $aqbudgetid     = $query->param('aqbudgetid');
293
    my $periodicity    = $query->param('frequency');
294
    my @irregularity   = $query->multi_param('irregularity');
345
    my @irregularity   = $query->multi_param('irregularity');
295
    my $numberpattern  = $query->param('numbering_pattern');
296
    my $locale         = $query->param('locale');
346
    my $locale         = $query->param('locale');
297
    my $graceperiod    = $query->param('graceperiod') || 0;
347
    my $graceperiod    = $query->param('graceperiod') || 0;
298
348
Lines 322-327 sub redirect_add_subscription { Link Here
322
    my $previousitemtype  = $query->param('previousitemtype');
372
    my $previousitemtype  = $query->param('previousitemtype');
323
    my $skip_serialseq    = $query->param('skip_serialseq');
373
    my $skip_serialseq    = $query->param('skip_serialseq');
324
374
375
    my $mana_id;
376
    if ( $query->param('mana_id') ne "" ) {
377
        $mana_id = $query->param('mana_id');
378
        Koha::SharedContent::manaNewUserPatchRequest("subscription",$mana_id);
379
    }
380
    else {
381
        $mana_id = undef;
382
    }
383
325
    my $startdate      = output_pref( { str => scalar $query->param('startdate'),      dateonly => 1, dateformat => 'iso' } );
384
    my $startdate      = output_pref( { str => scalar $query->param('startdate'),      dateonly => 1, dateformat => 'iso' } );
326
    my $enddate        = output_pref( { str => scalar $query->param('enddate'),        dateonly => 1, dateformat => 'iso' } );
385
    my $enddate        = output_pref( { str => scalar $query->param('enddate'),        dateonly => 1, dateformat => 'iso' } );
327
    my $firstacquidate = output_pref( { str => scalar $query->param('firstacquidate'), dateonly => 1, dateformat => 'iso' } );
386
    my $firstacquidate = output_pref( { str => scalar $query->param('firstacquidate'), dateonly => 1, dateformat => 'iso' } );
Lines 333-339 sub redirect_add_subscription { Link Here
333
            $enddate = _guess_enddate($startdate, $periodicity, $numberlength, $weeklength, $monthlength)
392
            $enddate = _guess_enddate($startdate, $periodicity, $numberlength, $weeklength, $monthlength)
334
        }
393
        }
335
    }
394
    }
336
337
    my $subscriptionid = NewSubscription(
395
    my $subscriptionid = NewSubscription(
338
        $auser, $branchcode, $aqbooksellerid, $cost, $aqbudgetid, $biblionumber,
396
        $auser, $branchcode, $aqbooksellerid, $cost, $aqbudgetid, $biblionumber,
339
        $startdate, $periodicity, $numberlength, $weeklength,
397
        $startdate, $periodicity, $numberlength, $weeklength,
Lines 342-348 sub redirect_add_subscription { Link Here
342
        join(";",@irregularity), $numberpattern, $locale, $callnumber,
400
        join(";",@irregularity), $numberpattern, $locale, $callnumber,
343
        $manualhistory, $internalnotes, $serialsadditems,
401
        $manualhistory, $internalnotes, $serialsadditems,
344
        $staffdisplaycount, $opacdisplaycount, $graceperiod, $location, $enddate,
402
        $staffdisplaycount, $opacdisplaycount, $graceperiod, $location, $enddate,
345
        $skip_serialseq
403
        $skip_serialseq, $mana_id
346
    );
404
    );
347
405
348
    my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
406
    my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
Lines 372-384 sub redirect_mod_subscription { Link Here
372
        ? output_pref( { str => $nextacquidate, dateonly => 1, dateformat => 'iso' } )
430
        ? output_pref( { str => $nextacquidate, dateonly => 1, dateformat => 'iso' } )
373
        : $firstacquidate;
431
        : $firstacquidate;
374
432
375
    my $periodicity = $query->param('frequency');
433
    my $periodicity = manage_subscription_frequencies_id();
434
    my $numberpattern = manage_subscription_numbering_pattern_id();
376
435
377
    my $subtype = $query->param('subtype');
436
    my $subtype = $query->param('subtype');
378
    my $sublength = $query->param('sublength');
437
    my $sublength = $query->param('sublength');
379
    my ($numberlength, $weeklength, $monthlength)
438
    my ($numberlength, $weeklength, $monthlength)
380
        = _get_sub_length( $subtype, $sublength );
439
        = _get_sub_length( $subtype, $sublength );
381
    my $numberpattern = $query->param('numbering_pattern');
382
    my $locale = $query->param('locale');
440
    my $locale = $query->param('locale');
383
    my $lastvalue1 = $query->param('lastvalue1');
441
    my $lastvalue1 = $query->param('lastvalue1');
384
    my $innerloop1 = $query->param('innerloop1');
442
    my $innerloop1 = $query->param('innerloop1');
Lines 401-406 sub redirect_mod_subscription { Link Here
401
    my $previousitemtype  = $query->param('previousitemtype');
459
    my $previousitemtype  = $query->param('previousitemtype');
402
    my $skip_serialseq    = $query->param('skip_serialseq');
460
    my $skip_serialseq    = $query->param('skip_serialseq');
403
461
462
    my $mana_id;
463
    if ( defined( $query->param('mana_id') ) ) {
464
        $mana_id = $query->param('mana_id');
465
        Koha::SharedContent::manaNewUserPatchRequest("subscription",$mana_id);
466
    }
467
    else {
468
        $mana_id = undef;
469
    }
470
404
    # Guess end date
471
    # Guess end date
405
    if(!defined $enddate || $enddate eq '') {
472
    if(!defined $enddate || $enddate eq '') {
406
        if($subtype eq "issues") {
473
        if($subtype eq "issues") {
Lines 426-432 sub redirect_mod_subscription { Link Here
426
        $status, $biblionumber, $callnumber, $notes, $letter,
493
        $status, $biblionumber, $callnumber, $notes, $letter,
427
        $manualhistory, $internalnotes, $serialsadditems, $staffdisplaycount,
494
        $manualhistory, $internalnotes, $serialsadditems, $staffdisplaycount,
428
        $opacdisplaycount, $graceperiod, $location, $enddate, $subscriptionid,
495
        $opacdisplaycount, $graceperiod, $location, $enddate, $subscriptionid,
429
        $skip_serialseq, $itemtype, $previousitemtype
496
        $skip_serialseq, $itemtype, $previousitemtype, $mana_id
430
    );
497
    );
431
498
432
    my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
499
    my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
(-)a/serials/subscription-detail.pl (-12 / +59 lines)
Lines 33-38 use Koha::Acquisition::Bookseller; Link Here
33
use Date::Calc qw/Today Day_of_Year Week_of_Year Add_Delta_Days/;
33
use Date::Calc qw/Today Day_of_Year Week_of_Year Add_Delta_Days/;
34
use Carp;
34
use Carp;
35
35
36
use LWP::UserAgent;
37
use Koha::SharedContent;
38
use Koha::Patrons;
39
use Koha::Subscriptions;
40
use Koha::Libraries;
41
36
my $query = new CGI;
42
my $query = new CGI;
37
my $op = $query->param('op') || q{};
43
my $op = $query->param('op') || q{};
38
my $issueconfirmed = $query->param('issueconfirmed');
44
my $issueconfirmed = $query->param('issueconfirmed');
Lines 68-98 my ($totalissues,@serialslist) = GetSerials($subscriptionid); Link Here
68
$totalissues-- if $totalissues; # the -1 is to have 0 if this is a new subscription (only 1 issue)
74
$totalissues-- if $totalissues; # the -1 is to have 0 if this is a new subscription (only 1 issue)
69
75
70
if ($op eq 'del') {
76
if ($op eq 'del') {
71
	if ($$subs{'cannotedit'}){
77
    if ($$subs{'cannotedit'}){
72
		carp "Attempt to delete subscription $subscriptionid by ".C4::Context->userenv->{'id'}." not allowed";
78
        carp "Attempt to delete subscription $subscriptionid by ".C4::Context->userenv->{'id'}." not allowed";
73
		print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid");
79
        print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid");
74
		exit;
80
        exit;
75
	}
81
    }
76
	
82
77
    # Asking for confirmation if the subscription has not strictly expired yet or if it has linked issues
83
    # Asking for confirmation if the subscription has not strictly expired yet or if it has linked issues
78
    my $strictlyexpired = HasSubscriptionStrictlyExpired($subscriptionid);
84
    my $strictlyexpired = HasSubscriptionStrictlyExpired($subscriptionid);
79
    my $linkedissues = CountIssues($subscriptionid);
85
    my $linkedissues = CountIssues($subscriptionid);
80
    my $countitems   = HasItems($subscriptionid);
86
    my $countitems   = HasItems($subscriptionid);
81
    if ($strictlyexpired == 0 || $linkedissues > 0 || $countitems>0) {
87
    if ($strictlyexpired == 0 || $linkedissues > 0 || $countitems>0) {
82
		$template->param(NEEDSCONFIRMATION => 1);
88
        $template->param(NEEDSCONFIRMATION => 1);
83
		if ($strictlyexpired == 0) { $template->param("NOTEXPIRED" => 1); }
89
        if ($strictlyexpired == 0) { $template->param("NOTEXPIRED" => 1); }
84
		if ($linkedissues     > 0) { $template->param("LINKEDISSUES" => 1); }
90
        if ($linkedissues     > 0) { $template->param("LINKEDISSUES" => 1); }
85
		if ($countitems       > 0) { $template->param("LINKEDITEMS"  => 1); }
91
        if ($countitems       > 0) { $template->param("LINKEDITEMS"  => 1); }
86
    } else {
92
    } else {
87
		$issueconfirmed = "1";
93
        $issueconfirmed = "1";
88
    }
94
    }
89
    # If it's ok to delete the subscription, we do so
95
    # If it's ok to delete the subscription, we do so
90
    if ($issueconfirmed eq "1") {
96
    if ($issueconfirmed eq "1") {
91
		&DelSubscription($subscriptionid);
97
        &DelSubscription($subscriptionid);
92
        print $query->redirect("/cgi-bin/koha/serials/serials-home.pl");
98
        print $query->redirect("/cgi-bin/koha/serials/serials-home.pl");
93
        exit;
99
        exit;
94
    }
100
    }
95
}
101
}
102
elsif ( $op and $op eq "share" ) {
103
    my $mana_language;
104
    if ( $query->param('mana_language') ) {
105
        $mana_language = $query->param('mana_language');
106
    }
107
    else {
108
        $mana_language = C4::Context->preference('language');
109
    }
110
111
    my $mana_email;
112
    if ( $loggedinuser ne 0 ) {
113
        my $borrower = Koha::Patrons->find($loggedinuser);
114
        $mana_email = $borrower->email
115
          if ( ( not defined($mana_email) ) or ( $mana_email eq '' ) );
116
        $mana_email = $borrower->emailpro
117
          if ( ( not defined($mana_email) ) or ( $mana_email eq '' ) );
118
        $mana_email =
119
          Koha::Libraries->find( C4::Context->userenv->{'branch'} )->branchemail
120
          if ( ( not defined($mana_email) ) or ( $mana_email eq '' ) );
121
    }
122
    $mana_email = C4::Context->preference('KohaAdminEmailAddress')
123
      if ( ( not defined($mana_email) ) or ( $mana_email eq '' ) );
124
    my %versions = C4::Context::get_versions();
125
126
    my $mana_info = {
127
        language    => $mana_language,
128
        kohaversion => $versions{'kohaVersion'},
129
        exportemail => $mana_email
130
    };
131
    my $sub_mana_info = Koha::Subscription::get_sharable_info($subscriptionid);
132
    $sub_mana_info = { %$sub_mana_info, %$mana_info };
133
    my $result = Koha::SharedContent::manaPostRequest( "subscription",
134
        $sub_mana_info );
135
    if ( $result->{code} eq "200" and $result->{code} eq "201" ) {
136
        my $subscription = Koha::Subscriptions->find($subscriptionid);
137
        $subscription->set( { mana_id => $result->{id} } )->store;
138
        $subs->{mana_id} = $result->{id};
139
    }
140
    $template->param( mana_code => $result->{code} );
141
}
142
96
my $hasRouting = check_routing($subscriptionid);
143
my $hasRouting = check_routing($subscriptionid);
97
144
98
(undef, $cookie, undef, undef)
145
(undef, $cookie, undef, undef)
(-)a/svc/mana/search (+62 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
# Copyright 2016 BibLibre Morgane Alonso
4
#
5
# This file is part of Koha.
6
#
7
# Koha is free software; you can redistribute it and/or modify it
8
# under the terms of the GNU General Public License as published by
9
# the Free Software Foundation; either version 3 of the License, or
10
# (at your option) any later version.
11
#
12
# Koha is distributed in the hope that it will be useful, but
13
# WITHOUT ANY WARRANTY; without even the implied warranty of
14
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
# GNU General Public License for more details.
16
#
17
# You should have received a copy of the GNU General Public License
18
# along with Koha; if not, see <http://www.gnu.org/licenses>.
19
#
20
21
use strict;
22
use warnings;
23
24
use Koha::SharedContent;
25
use Koha::Subscription;
26
use C4::Auth qw(check_cookie_auth), qw(get_template_and_user);
27
use C4::Output qw( output_with_http_headers );
28
29
use CGI;
30
use JSON;
31
32
my $input = new CGI;
33
34
my ( $auth_status, $sessionID ) =
35
  check_cookie_auth( $input->cookie('CGISESSID'),
36
    { serials => 'create_subscription' } );
37
38
if ( $auth_status ne "ok" ) {
39
    exit 0;
40
}
41
42
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
43
    {
44
        template_name   => "serials/mana-subscription-search-result.tt",
45
        query           => $input,
46
        type            => "intranet",
47
        authnotrequired => 0,
48
49
        # flagsrequired   => { serials => $permission },
50
        flagsrequired => { serials => 'create_subscription' },
51
        debug         => 1,
52
    }
53
);
54
55
my $biblionumber = $input->param('biblionumber');
56
57
my $sub_mana_info = Koha::Subscription::get_search_info($biblionumber);
58
my $result =
59
  Koha::SharedContent::manaGetRequest( "subscription", $sub_mana_info );
60
$template->param( subscriptions => $result->{data} );
61
62
output_with_http_headers $input, $cookie, $template->output, 'json';
(-)a/svc/mana/use (+48 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
# Copyright 2016 BibLibre Morgane Alonso
4
#
5
# This file is part of Koha.
6
#
7
# Koha is free software; you can redistribute it and/or modify it
8
# under the terms of the GNU General Public License as published by
9
# the Free Software Foundation; either version 3 of the License, or
10
# (at your option) any later version.
11
#
12
# Koha is distributed in the hope that it will be useful, but
13
# WITHOUT ANY WARRANTY; without even the implied warranty of
14
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
# GNU General Public License for more details.
16
#
17
# You should have received a copy of the GNU General Public License
18
# along with Koha; if not, see <http://www.gnu.org/licenses>.
19
#
20
21
use strict;
22
use warnings;
23
24
use Koha::SharedContent;
25
use C4::Auth qw(check_cookie_auth);
26
27
use CGI;
28
use JSON;
29
30
31
my $input = new CGI;
32
binmode STDOUT, ":encoding(UTF-8)";
33
print $input->header( -type => 'text/plain', -charset => 'UTF-8' );
34
35
my ( $auth_status, $sessionID ) =
36
  check_cookie_auth( $input->cookie('CGISESSID'),
37
    { serials => 'create_subscription' } );
38
39
if ( $auth_status ne "ok" ) {
40
    exit 0;
41
}
42
43
my $result = Koha::SharedContent::manaGetRequestWithId("subscription", $input->param('id') );
44
45
my $subscription;
46
$subscription = $result->{data};
47
48
print(to_json($subscription));
(-)a/t/db_dependent/Serials.t (-1 / +2 lines)
Lines 290-296 my $pattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($subscrip Link Here
290
( $total_issues, @serials ) = C4::Serials::GetSerials( $subscriptionid );
290
( $total_issues, @serials ) = C4::Serials::GetSerials( $subscriptionid );
291
my $publisheddate = output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 });
291
my $publisheddate = output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 });
292
( $total_issues, @serials ) = C4::Serials::GetSerials( $subscriptionid );
292
( $total_issues, @serials ) = C4::Serials::GetSerials( $subscriptionid );
293
my $nextpublisheddate = C4::Serials::GetNextDate($subscription, $publisheddate, 1);
293
my $frequency = C4::Serials::Frequency::GetSubscriptionFrequency($subscription->{periodicity});
294
my $nextpublisheddate = C4::Serials::GetNextDate($subscription, $publisheddate, $frequency, 1);
294
my @statuses = qw( 2 2 3 3 3 3 3 4 4 41 42 43 44 5 );
295
my @statuses = qw( 2 2 3 3 3 3 3 4 4 41 42 43 44 5 );
295
# Add 14 serials
296
# Add 14 serials
296
my $counter = 0;
297
my $counter = 0;
(-)a/t/db_dependent/Serials/GetFictiveIssueNumber.t (+126 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
use C4::Context;
4
use Test::More tests => 18;
5
use Modern::Perl;
6
7
my $dbh = C4::Context->dbh;
8
$dbh->{RaiseError} = 1;
9
$dbh->{AutoCommit} = 0;
10
11
use C4::Serials::Frequency;
12
use C4::Serials;
13
14
# TEST CASE - 1 issue per day, no irregularities
15
my $frequency = {
16
    description   => "One issue per day",
17
    unit          => 'day',
18
    issuesperunit => 1,
19
    unitsperissue => 1,
20
};
21
22
my $subscription = {
23
    firstacquidate     => '1970-01-01',
24
    irregularity       => '',
25
    countissuesperunit => 1,
26
};
27
my $issueNumber;
28
29
$issueNumber =
30
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-01', $frequency );
31
is( $issueNumber, '1' );
32
33
$issueNumber =
34
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-02', $frequency );
35
is( $issueNumber, '2' );
36
$issueNumber =
37
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-03', $frequency );
38
is( $issueNumber, '3' );
39
40
# TEST CASE - 2 issues per day, no irregularity
41
$frequency = {
42
    description   => "Two issues per day",
43
    unit          => 'day',
44
    issuesperunit => 2,
45
    unitsperissue => 1,
46
};
47
$subscription = {
48
    firstacquidate     => '1970-01-01',
49
    irregularity       => '',
50
    countissuesperunit => 1,
51
};
52
$issueNumber =
53
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-01', $frequency );
54
is( $issueNumber, '1' );
55
$issueNumber =
56
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-02', $frequency );
57
is( $issueNumber, '3' );
58
$issueNumber =
59
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-03', $frequency );
60
is( $issueNumber, '5' );
61
62
$subscription->{countissuesperunit} = 2;
63
$issueNumber =
64
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-01', $frequency );
65
is( $issueNumber, '2' );
66
$issueNumber =
67
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-02', $frequency );
68
is( $issueNumber, '4' );
69
$issueNumber =
70
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-03', $frequency );
71
is( $issueNumber, '6' );
72
73
# TEST CASE - 1 issue every 2 days, no irregularity
74
$frequency = {
75
    description   => "one issue every two days",
76
    unit          => 'day',
77
    issuesperunit => 1,
78
    unitsperissue => 2,
79
};
80
$subscription = {
81
    firstacquidate     => '1970-01-01',
82
    irregularity       => '',
83
    countissuesperunit => 1,
84
};
85
$issueNumber =
86
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-01', $frequency );
87
is( $issueNumber, 1 );
88
$issueNumber =
89
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-02', $frequency );
90
is( $issueNumber, 1 );
91
$issueNumber =
92
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-03', $frequency );
93
is( $issueNumber, 2 );
94
$issueNumber =
95
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-04', $frequency );
96
is( $issueNumber, 2 );
97
$issueNumber =
98
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-05', $frequency );
99
is( $issueNumber, 3 );
100
101
# TEST CASE - 1 issue per week, no irregularity
102
$frequency = {
103
    description   => "one issue per week",
104
    unit          => 'week',
105
    issuesperunit => 1,
106
    unitsperissue => 1,
107
};
108
$subscription = {
109
    firstacquidate     => '1970-01-01',
110
    irregularity       => '',
111
    countissuesperunit => 1,
112
};
113
$issueNumber =
114
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-01', $frequency );
115
is( $issueNumber, 1 );
116
$issueNumber =
117
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-02', $frequency );
118
is( $issueNumber, 1 );
119
$issueNumber =
120
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-08', $frequency );
121
is( $issueNumber, 2 );
122
$issueNumber =
123
  C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-15', $frequency );
124
is( $issueNumber, 3 );
125
126
$dbh->rollback;
(-)a/t/db_dependent/Serials/GetNextDate.t (-150 / +122 lines)
Lines 18-541 my $frequency = { Link Here
18
    issuesperunit => 1,
18
    issuesperunit => 1,
19
    unitsperissue => 1,
19
    unitsperissue => 1,
20
};
20
};
21
my $id = AddSubscriptionFrequency($frequency);
22
21
23
my $subscription = {
22
my $subscription = {
24
    periodicity => $id,
25
    firstacquidate => '1970-01-01',
23
    firstacquidate => '1970-01-01',
26
    irregularity => '',
24
    irregularity => '',
27
    countissuesperunit => 1,
25
    countissuesperunit => 1,
28
};
26
};
29
my $publisheddate = $subscription->{firstacquidate};
27
my $publisheddate = $subscription->{firstacquidate};
30
28
31
$publisheddate = GetNextDate($subscription, $publisheddate);
29
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
32
is($publisheddate, '1970-01-02');
30
is($publisheddate, '1970-01-02');
33
$publisheddate = GetNextDate($subscription, $publisheddate);
31
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
34
is($publisheddate, '1970-01-03');
32
is($publisheddate, '1970-01-03');
35
$publisheddate = GetNextDate($subscription, $publisheddate);
33
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
36
is($publisheddate, '1970-01-04');
34
is($publisheddate, '1970-01-04');
37
35
38
# TEST CASE - 1 issue per day, irregularities
36
# TEST CASE - 1 issue per day, irregularities
39
$subscription = {
37
$subscription = {
40
    periodicity => $id,
41
    firstacquidate => '1970-01-01',
38
    firstacquidate => '1970-01-01',
42
    irregularity => '2;4',  # Skip the second and fourth issues
39
    irregularity => '2;4',  # Skip the second and fourth issues
43
    countissuesperunit => 1,
40
    countissuesperunit => 1,
44
};
41
};
45
$publisheddate = $subscription->{firstacquidate};
42
$publisheddate = $subscription->{firstacquidate};
46
$publisheddate = GetNextDate($subscription, $publisheddate);
43
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
47
is($publisheddate, '1970-01-03');
44
is($publisheddate, '1970-01-03');
48
$publisheddate = GetNextDate($subscription, $publisheddate);
45
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
49
is($publisheddate, '1970-01-05');
46
is($publisheddate, '1970-01-05');
50
$publisheddate = GetNextDate($subscription, $publisheddate);
47
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
51
is($publisheddate, '1970-01-06');
48
is($publisheddate, '1970-01-06');
52
49
53
# TEST CASE - 2 issues per day, no irregularity
50
# TEST CASE - 2 issues per day, no irregularity
54
$id = AddSubscriptionFrequency({
51
$frequency = {
55
    description => "Two issues per day",
52
    description => "Two issues per day",
56
    unit => 'day',
53
    unit => 'day',
57
    issuesperunit => 2,
54
    issuesperunit => 2,
58
    unitsperissue => 1,
55
    unitsperissue => 1,
59
});
56
};
60
$subscription = {
57
$subscription = {
61
    periodicity => $id,
62
    firstacquidate => '1970-01-01',
58
    firstacquidate => '1970-01-01',
63
    irregularity => '',
59
    irregularity => '',
64
    countissuesperunit => 1,
60
    countissuesperunit => 1,
65
};
61
};
66
$publisheddate = $subscription->{firstacquidate};
62
$publisheddate = $subscription->{firstacquidate};
67
$publisheddate = GetNextDate($subscription, $publisheddate);
63
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
68
is($publisheddate, '1970-01-01');
64
is($publisheddate, '1970-01-01');
69
$publisheddate = GetNextDate($subscription, $publisheddate);
65
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
70
is($publisheddate, '1970-01-02');
66
is($publisheddate, '1970-01-02');
71
$publisheddate = GetNextDate($subscription, $publisheddate);
67
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
72
is($publisheddate, '1970-01-02');
68
is($publisheddate, '1970-01-02');
73
$publisheddate = GetNextDate($subscription, $publisheddate);
69
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
74
is($publisheddate, '1970-01-03');
70
is($publisheddate, '1970-01-03');
75
71
76
# TEST CASE - 2 issues per day, irregularities
72
# TEST CASE - 2 issues per day, irregularities
77
$subscription = {
73
$subscription = {
78
    periodicity => $id,
79
    firstacquidate => '1970-01-01',
74
    firstacquidate => '1970-01-01',
80
    irregularity => '3;5;6',
75
    irregularity => '3;5;6',
81
    countissuesperunit => 1,
76
    countissuesperunit => 1,
82
};
77
};
83
$publisheddate = $subscription->{firstacquidate};
78
$publisheddate = $subscription->{firstacquidate};
84
$publisheddate = GetNextDate($subscription, $publisheddate);
79
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
85
is($publisheddate, '1970-01-01');
80
is($publisheddate, '1970-01-01');
86
$publisheddate = GetNextDate($subscription, $publisheddate);
81
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
87
is($publisheddate, '1970-01-02');
82
is($publisheddate, '1970-01-02');
88
$publisheddate = GetNextDate($subscription, $publisheddate);
83
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
89
is($publisheddate, '1970-01-04');
84
is($publisheddate, '1970-01-04');
90
$publisheddate = GetNextDate($subscription, $publisheddate);
85
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
91
is($publisheddate, '1970-01-04');
86
is($publisheddate, '1970-01-04');
92
$publisheddate = GetNextDate($subscription, $publisheddate);
87
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
93
is($publisheddate, '1970-01-05');
88
is($publisheddate, '1970-01-05');
94
89
95
# TEST CASE - 1 issue every 2 days, no irregularity
90
# TEST CASE - 1 issue every 2 days, no irregularity
96
$id = AddSubscriptionFrequency({
91
$frequency = {
97
    description => "one issue every two days",
92
    description => "one issue every two days",
98
    unit => 'day',
93
    unit => 'day',
99
    issuesperunit => 1,
94
    issuesperunit => 1,
100
    unitsperissue => 2,
95
    unitsperissue => 2,
101
});
96
};
102
$subscription = {
97
$subscription = {
103
    periodicity => $id,
104
    firstacquidate => '1970-01-01',
98
    firstacquidate => '1970-01-01',
105
    irregularity => '',
99
    irregularity => '',
106
    countissuesperunit => 1,
100
    countissuesperunit => 1,
107
};
101
};
108
$publisheddate = $subscription->{firstacquidate};
102
$publisheddate = $subscription->{firstacquidate};
109
$publisheddate = GetNextDate($subscription, $publisheddate);
103
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
110
is($publisheddate, '1970-01-03');
104
is($publisheddate, '1970-01-03');
111
$publisheddate = GetNextDate($subscription, $publisheddate);
105
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
112
is($publisheddate, '1970-01-05');
106
is($publisheddate, '1970-01-05');
113
107
114
# TEST CASE - 1 issue every 2 days, irregularities
108
# TEST CASE - 1 issue every 2 days, irregularities
115
$subscription = {
109
$subscription = {
116
    periodicity => $id,
117
    firstacquidate => '1970-01-01',
110
    firstacquidate => '1970-01-01',
118
    irregularity => '3',
111
    irregularity => '3',
119
    countissuesperunit => 1,
112
    countissuesperunit => 1,
120
};
113
};
121
$publisheddate = $subscription->{firstacquidate};
114
$publisheddate = $subscription->{firstacquidate};
122
$publisheddate = GetNextDate($subscription, $publisheddate);
115
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
123
is($publisheddate, '1970-01-03');
116
is($publisheddate, '1970-01-03');
124
$publisheddate = GetNextDate($subscription, $publisheddate);
117
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
125
is($publisheddate, '1970-01-07');
118
is($publisheddate, '1970-01-07');
126
$publisheddate = GetNextDate($subscription, $publisheddate);
119
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
127
is($publisheddate, '1970-01-09');
120
is($publisheddate, '1970-01-09');
128
121
129
# TEST CASE - 1 issue per week, no irregularity
122
# TEST CASE - 1 issue per week, no irregularity
130
$id = AddSubscriptionFrequency({
123
$frequency = {
131
    description => "one issue per week",
124
    description => "one issue per week",
132
    unit => 'week',
125
    unit => 'week',
133
    issuesperunit => 1,
126
    issuesperunit => 1,
134
    unitsperissue => 1,
127
    unitsperissue => 1,
135
});
128
};
136
$subscription = {
129
$subscription = {
137
    periodicity => $id,
138
    firstacquidate => '1970-01-01',
130
    firstacquidate => '1970-01-01',
139
    irregularity => '',
131
    irregularity => '',
140
    countissuesperunit => 1,
132
    countissuesperunit => 1,
141
};
133
};
142
$publisheddate = $subscription->{firstacquidate};
134
$publisheddate = $subscription->{firstacquidate};
143
$publisheddate = GetNextDate($subscription, $publisheddate);
135
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
144
is($publisheddate, '1970-01-08');
136
is($publisheddate, '1970-01-08');
145
$publisheddate = GetNextDate($subscription, $publisheddate);
137
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
146
is($publisheddate, '1970-01-15');
138
is($publisheddate, '1970-01-15');
147
139
148
# TEST CASE - 1 issue per week, irregularities
140
# TEST CASE - 1 issue per week, irregularities
149
$subscription = {
141
$subscription = {
150
    periodicity => $id,
151
    firstacquidate => '1970-01-01',
142
    firstacquidate => '1970-01-01',
152
    irregularity => '3',
143
    irregularity => '3',
153
    countissuesperunit => 1,
144
    countissuesperunit => 1,
154
};
145
};
155
$publisheddate = $subscription->{firstacquidate};
146
$publisheddate = $subscription->{firstacquidate};
156
$publisheddate = GetNextDate($subscription, $publisheddate);
147
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
157
is($publisheddate, '1970-01-08');
148
is($publisheddate, '1970-01-08');
158
$publisheddate = GetNextDate($subscription, $publisheddate);
149
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
159
is($publisheddate, '1970-01-22');
150
is($publisheddate, '1970-01-22');
160
$publisheddate = GetNextDate($subscription, $publisheddate);
151
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
161
is($publisheddate, '1970-01-29');
152
is($publisheddate, '1970-01-29');
162
153
163
# TEST CASE - 1 issue every 2 weeks, no irregularity
154
# TEST CASE - 1 issue every 2 weeks, no irregularity
164
$id = AddSubscriptionFrequency({
155
$frequency = {
165
    description => "one issue every 2 weeks",
156
    description => "one issue every 2 weeks",
166
    unit => 'week',
157
    unit => 'week',
167
    issuesperunit => 1,
158
    issuesperunit => 1,
168
    unitsperissue => 2,
159
    unitsperissue => 2,
169
});
160
};
170
$subscription = {
161
$subscription = {
171
    periodicity => $id,
172
    firstacquidate => '1970-01-01',
162
    firstacquidate => '1970-01-01',
173
    irregularity => '',
163
    irregularity => '',
174
    countissuesperunit => 1,
164
    countissuesperunit => 1,
175
};
165
};
176
$publisheddate = $subscription->{firstacquidate};
166
$publisheddate = $subscription->{firstacquidate};
177
$publisheddate = GetNextDate($subscription, $publisheddate);
167
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
178
is($publisheddate, '1970-01-15');
168
is($publisheddate, '1970-01-15');
179
$publisheddate = GetNextDate($subscription, $publisheddate);
169
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
180
is($publisheddate, '1970-01-29');
170
is($publisheddate, '1970-01-29');
181
$publisheddate = GetNextDate($subscription, $publisheddate);
171
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
182
is($publisheddate, '1970-02-12');
172
is($publisheddate, '1970-02-12');
183
173
184
# TEST CASE - 1 issue every 2 weeks, irregularities
174
# TEST CASE - 1 issue every 2 weeks, irregularities
185
$subscription = {
175
$subscription = {
186
    periodicity => $id,
187
    firstacquidate => '1970-01-01',
176
    firstacquidate => '1970-01-01',
188
    irregularity => '3',
177
    irregularity => '3',
189
    countissuesperunit => 1,
178
    countissuesperunit => 1,
190
};
179
};
191
$publisheddate = $subscription->{firstacquidate};
180
$publisheddate = $subscription->{firstacquidate};
192
$publisheddate = GetNextDate($subscription, $publisheddate);
181
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
193
is($publisheddate, '1970-01-15');
182
is($publisheddate, '1970-01-15');
194
$publisheddate = GetNextDate($subscription, $publisheddate);
183
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
195
is($publisheddate, '1970-02-12');
184
is($publisheddate, '1970-02-12');
196
$publisheddate = GetNextDate($subscription, $publisheddate);
185
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
197
is($publisheddate, '1970-02-26');
186
is($publisheddate, '1970-02-26');
198
187
199
# TEST CASE - 2 issues per week, no irregularity
188
# TEST CASE - 2 issues per week, no irregularity
200
$id = AddSubscriptionFrequency({
189
$frequency = {
201
    description => "two issues per week",
190
    description => "two issues per week",
202
    unit => 'week',
191
    unit => 'week',
203
    issuesperunit => 2,
192
    issuesperunit => 2,
204
    unitsperissue => 1,
193
    unitsperissue => 1,
205
});
194
};
206
$subscription = {
195
$subscription = {
207
    periodicity => $id,
208
    firstacquidate => '1970-01-01',
196
    firstacquidate => '1970-01-01',
209
    irregularity => '',
197
    irregularity => '',
210
    countissuesperunit => 1,
198
    countissuesperunit => 1,
211
};
199
};
212
$publisheddate = $subscription->{firstacquidate};
200
$publisheddate = $subscription->{firstacquidate};
213
$publisheddate = GetNextDate($subscription, $publisheddate);
201
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
214
is($publisheddate, '1970-01-03');
202
is($publisheddate, '1970-01-03');
215
# when more than 1 issue per week, date is automatically set to the same day of
203
# when more than 1 issue per week, date is automatically set to the same day of
216
# week as firstacquidate
204
# week as firstacquidate
217
$publisheddate = GetNextDate($subscription, $publisheddate);
205
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
218
is($publisheddate, '1970-01-08');
206
is($publisheddate, '1970-01-08');
219
$publisheddate = GetNextDate($subscription, $publisheddate);
207
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
220
is($publisheddate, '1970-01-10');
208
is($publisheddate, '1970-01-10');
221
$publisheddate = GetNextDate($subscription, $publisheddate);
209
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
222
is($publisheddate, '1970-01-15');
210
is($publisheddate, '1970-01-15');
223
211
224
# TEST CASE - 2 issues per week, irregularities
212
# TEST CASE - 2 issues per week, irregularities
225
$subscription = {
213
$subscription = {
226
    periodicity => $id,
227
    firstacquidate => '1970-01-01',
214
    firstacquidate => '1970-01-01',
228
    irregularity => '3;5;6',
215
    irregularity => '3;5;6',
229
    countissuesperunit => 1,
216
    countissuesperunit => 1,
230
};
217
};
231
$publisheddate = $subscription->{firstacquidate};
218
$publisheddate = $subscription->{firstacquidate};
232
$publisheddate = GetNextDate($subscription, $publisheddate);
219
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
233
is($publisheddate, '1970-01-03');
220
is($publisheddate, '1970-01-03');
234
$publisheddate = GetNextDate($subscription, $publisheddate);
221
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
235
is($publisheddate, '1970-01-10');
222
is($publisheddate, '1970-01-10');
236
$publisheddate = GetNextDate($subscription, $publisheddate);
223
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
237
is($publisheddate, '1970-01-22');
224
is($publisheddate, '1970-01-22');
238
$publisheddate = GetNextDate($subscription, $publisheddate);
225
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
239
is($publisheddate, '1970-01-24');
226
is($publisheddate, '1970-01-24');
240
$publisheddate = GetNextDate($subscription, $publisheddate);
227
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
241
is($publisheddate, '1970-01-29');
228
is($publisheddate, '1970-01-29');
242
229
243
# TEST CASE - 6 issues per week, no irregularity
230
# TEST CASE - 6 issues per week, no irregularity
244
$id = AddSubscriptionFrequency({
231
$frequency = {
245
    description => "six issues per week",
232
    description => "six issues per week",
246
    unit => 'week',
233
    unit => 'week',
247
    issuesperunit => 6,
234
    issuesperunit => 6,
248
    unitsperissue => 1,
235
    unitsperissue => 1,
249
});
236
};
250
$subscription = {
237
$subscription = {
251
    periodicity => $id,
252
    firstacquidate => '1970-01-06',
238
    firstacquidate => '1970-01-06',
253
    irregularity => '',
239
    irregularity => '',
254
    countissuesperunit => 1,
240
    countissuesperunit => 1,
255
};
241
};
256
$publisheddate = $subscription->{firstacquidate};
242
$publisheddate = $subscription->{firstacquidate};
257
$publisheddate = GetNextDate($subscription, $publisheddate);
243
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
258
is($publisheddate, '1970-01-07');
244
is($publisheddate, '1970-01-07');
259
$publisheddate = GetNextDate($subscription, $publisheddate);
245
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
260
is($publisheddate, '1970-01-08');
246
is($publisheddate, '1970-01-08');
261
$publisheddate = GetNextDate($subscription, $publisheddate);
247
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
262
is($publisheddate, '1970-01-09');
248
is($publisheddate, '1970-01-09');
263
$publisheddate = GetNextDate($subscription, $publisheddate);
249
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
264
is($publisheddate, '1970-01-10');
250
is($publisheddate, '1970-01-10');
265
$publisheddate = GetNextDate($subscription, $publisheddate);
251
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
266
is($publisheddate, '1970-01-11');
252
is($publisheddate, '1970-01-11');
267
$publisheddate = GetNextDate($subscription, $publisheddate);
253
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
268
is($publisheddate, '1970-01-13');
254
is($publisheddate, '1970-01-13');
269
255
270
# TEST CASE - 6 issues per week, irregularities
256
# TEST CASE - 6 issues per week, irregularities
271
$subscription = {
257
$subscription = {
272
    periodicity => $id,
273
    firstacquidate => '1970-01-06',
258
    firstacquidate => '1970-01-06',
274
    irregularity => '3;5;6',
259
    irregularity => '3;5;6',
275
    countissuesperunit => 1,
260
    countissuesperunit => 1,
276
};
261
};
277
$publisheddate = $subscription->{firstacquidate};
262
$publisheddate = $subscription->{firstacquidate};
278
$publisheddate = GetNextDate($subscription, $publisheddate);
263
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
279
is($publisheddate, '1970-01-07');
264
is($publisheddate, '1970-01-07');
280
$publisheddate = GetNextDate($subscription, $publisheddate);
265
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
281
is($publisheddate, '1970-01-09');
266
is($publisheddate, '1970-01-09');
282
$publisheddate = GetNextDate($subscription, $publisheddate);
267
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
283
is($publisheddate, '1970-01-13');
268
is($publisheddate, '1970-01-13');
284
$publisheddate = GetNextDate($subscription, $publisheddate);
269
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
285
is($publisheddate, '1970-01-14');
270
is($publisheddate, '1970-01-14');
286
271
287
# TEST CASE - 1 issue per month, no irregularity
272
# TEST CASE - 1 issue per month, no irregularity
288
$id = AddSubscriptionFrequency({
273
$frequency = {
289
    description => "1 issue per month",
274
    description => "1 issue per month",
290
    unit => 'month',
275
    unit => 'month',
291
    issuesperunit => 1,
276
    issuesperunit => 1,
292
    unitsperissue => 1,
277
    unitsperissue => 1,
293
});
278
};
294
$subscription = {
279
$subscription = {
295
    periodicity => $id,
296
    firstacquidate => '1970-01-01',
280
    firstacquidate => '1970-01-01',
297
    irregularity => '',
281
    irregularity => '',
298
    countissuesperunit => 1,
282
    countissuesperunit => 1,
299
};
283
};
300
$publisheddate = $subscription->{firstacquidate};
284
$publisheddate = $subscription->{firstacquidate};
301
$publisheddate = GetNextDate($subscription, $publisheddate);
285
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
302
is($publisheddate, '1970-02-01');
286
is($publisheddate, '1970-02-01');
303
$publisheddate = GetNextDate($subscription, $publisheddate);
287
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
304
is($publisheddate, '1970-03-01');
288
is($publisheddate, '1970-03-01');
305
$publisheddate = GetNextDate($subscription, $publisheddate);
289
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
306
is($publisheddate, '1970-04-01');
290
is($publisheddate, '1970-04-01');
307
291
308
# TEST CASE - 1 issue per month, irregularities
292
# TEST CASE - 1 issue per month, irregularities
309
$subscription = {
293
$subscription = {
310
    periodicity => $id,
311
    firstacquidate => '1970-01-01',
294
    firstacquidate => '1970-01-01',
312
    irregularity => '2;4',
295
    irregularity => '2;4',
313
    countissuesperunit => 1,
296
    countissuesperunit => 1,
314
};
297
};
315
$publisheddate = $subscription->{firstacquidate};
298
$publisheddate = $subscription->{firstacquidate};
316
$publisheddate = GetNextDate($subscription, $publisheddate);
299
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
317
is($publisheddate, '1970-03-01');
300
is($publisheddate, '1970-03-01');
318
$publisheddate = GetNextDate($subscription, $publisheddate);
301
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
319
is($publisheddate, '1970-05-01');
302
is($publisheddate, '1970-05-01');
320
$publisheddate = GetNextDate($subscription, $publisheddate);
303
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
321
is($publisheddate, '1970-06-01');
304
is($publisheddate, '1970-06-01');
322
305
323
# TEST CASE - 1 issue every 2 months, no irregularity
306
# TEST CASE - 1 issue every 2 months, no irregularity
324
$id = AddSubscriptionFrequency({
307
$frequency = {
325
    description => "1 issue every 2 months",
308
    description => "1 issue every 2 months",
326
    unit => 'month',
309
    unit => 'month',
327
    issuesperunit => 1,
310
    issuesperunit => 1,
328
    unitsperissue => 2,
311
    unitsperissue => 2,
329
});
312
};
330
$subscription = {
313
$subscription = {
331
    periodicity => $id,
332
    firstacquidate => '1970-01-01',
314
    firstacquidate => '1970-01-01',
333
    irregularity => '',
315
    irregularity => '',
334
    countissuesperunit => 1,
316
    countissuesperunit => 1,
335
};
317
};
336
$publisheddate = $subscription->{firstacquidate};
318
$publisheddate = $subscription->{firstacquidate};
337
$publisheddate = GetNextDate($subscription, $publisheddate);
319
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
338
is($publisheddate, '1970-03-01');
320
is($publisheddate, '1970-03-01');
339
$publisheddate = GetNextDate($subscription, $publisheddate);
321
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
340
is($publisheddate, '1970-05-01');
322
is($publisheddate, '1970-05-01');
341
$publisheddate = GetNextDate($subscription, $publisheddate);
323
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
342
is($publisheddate, '1970-07-01');
324
is($publisheddate, '1970-07-01');
343
325
344
# TEST CASE - 1 issue every 2 months, irregularities
326
# TEST CASE - 1 issue every 2 months, irregularities
345
$subscription = {
327
$subscription = {
346
    periodicity => $id,
347
    firstacquidate => '1970-01-01',
328
    firstacquidate => '1970-01-01',
348
    irregularity => '2;3',
329
    irregularity => '2;3',
349
    countissuesperunit => 1,
330
    countissuesperunit => 1,
350
};
331
};
351
$publisheddate = $subscription->{firstacquidate};
332
$publisheddate = $subscription->{firstacquidate};
352
$publisheddate = GetNextDate($subscription, $publisheddate);
333
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
353
is($publisheddate, '1970-07-01');
334
is($publisheddate, '1970-07-01');
354
$publisheddate = GetNextDate($subscription, $publisheddate);
335
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
355
is($publisheddate, '1970-09-01');
336
is($publisheddate, '1970-09-01');
356
$publisheddate = GetNextDate($subscription, $publisheddate);
337
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
357
is($publisheddate, '1970-11-01');
338
is($publisheddate, '1970-11-01');
358
339
359
# TEST CASE - 2 issues per month, no irregularity
340
# TEST CASE - 2 issues per month, no irregularity
360
$id = AddSubscriptionFrequency({
341
$frequency = {
361
    description => "2 issues per month",
342
    description => "2 issues per month",
362
    unit => 'month',
343
    unit => 'month',
363
    issuesperunit => 2,
344
    issuesperunit => 2,
364
    unitsperissue => 1,
345
    unitsperissue => 1,
365
});
346
};
366
$subscription = {
347
$subscription = {
367
    periodicity => $id,
368
    firstacquidate => '1970-01-01',
348
    firstacquidate => '1970-01-01',
369
    irregularity => '',
349
    irregularity => '',
370
    countissuesperunit => 1,
350
    countissuesperunit => 1,
371
};
351
};
372
$publisheddate = $subscription->{firstacquidate};
352
$publisheddate = $subscription->{firstacquidate};
373
$publisheddate = GetNextDate($subscription, $publisheddate);
353
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
374
is($publisheddate, '1970-01-16', 'January has 31 days');
354
is($publisheddate, '1970-01-16', 'January has 31 days');
375
$publisheddate = GetNextDate($subscription, $publisheddate);
355
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
376
is($publisheddate, '1970-02-01');
356
is($publisheddate, '1970-02-01');
377
$publisheddate = GetNextDate($subscription, $publisheddate);
357
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
378
is($publisheddate, '1970-02-15', 'February has only 28 days');
358
is($publisheddate, '1970-02-15', 'February has only 28 days');
379
$publisheddate = GetNextDate($subscription, $publisheddate);
359
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
380
is($publisheddate, '1970-03-01');
360
is($publisheddate, '1970-03-01');
381
361
382
# TEST CASE - 2 issues per month, irregularities
362
# TEST CASE - 2 issues per month, irregularities
383
$subscription = {
363
$subscription = {
384
    periodicity => $id,
385
    firstacquidate => '1970-01-01',
364
    firstacquidate => '1970-01-01',
386
    irregularity => '3;5;6',
365
    irregularity => '3;5;6',
387
    countissuesperunit => 1,
366
    countissuesperunit => 1,
388
};
367
};
389
$publisheddate = $subscription->{firstacquidate};
368
$publisheddate = $subscription->{firstacquidate};
390
$publisheddate = GetNextDate($subscription, $publisheddate);
369
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
391
is($publisheddate, '1970-01-16', 'January has 31 days');
370
is($publisheddate, '1970-01-16', 'January has 31 days');
392
$publisheddate = GetNextDate($subscription, $publisheddate);
371
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
393
is($publisheddate, '1970-02-15', 'February has only 28 days');
372
is($publisheddate, '1970-02-15', 'February has only 28 days');
394
$publisheddate = GetNextDate($subscription, $publisheddate);
373
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
395
is($publisheddate, '1970-04-01');
374
is($publisheddate, '1970-04-01');
396
$publisheddate = GetNextDate($subscription, $publisheddate);
375
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
397
is($publisheddate, '1970-04-16', 'April has 30 days');
376
is($publisheddate, '1970-04-16', 'April has 30 days');
398
$publisheddate = GetNextDate($subscription, $publisheddate);
377
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
399
is($publisheddate, '1970-05-01');
378
is($publisheddate, '1970-05-01');
400
379
401
# TEST CASE - 1 issue per year, no irregularity
380
# TEST CASE - 1 issue per year, no irregularity
402
$id = AddSubscriptionFrequency({
381
$frequency = {
403
    description => "1 issue per year",
382
    description => "1 issue per year",
404
    unit => 'year',
383
    unit => 'year',
405
    issuesperunit => 1,
384
    issuesperunit => 1,
406
    unitsperissue => 1,
385
    unitsperissue => 1,
407
});
386
};
408
$subscription = {
387
$subscription = {
409
    periodicity => $id,
410
    firstacquidate => '1970-01-01',
388
    firstacquidate => '1970-01-01',
411
    irregularity => '',
389
    irregularity => '',
412
    countissuesperunit => 1,
390
    countissuesperunit => 1,
413
};
391
};
414
$publisheddate = $subscription->{firstacquidate};
392
$publisheddate = $subscription->{firstacquidate};
415
$publisheddate = GetNextDate($subscription, $publisheddate);
393
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
416
is($publisheddate, '1971-01-01');
394
is($publisheddate, '1971-01-01');
417
$publisheddate = GetNextDate($subscription, $publisheddate);
395
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
418
is($publisheddate, '1972-01-01');
396
is($publisheddate, '1972-01-01');
419
$publisheddate = GetNextDate($subscription, $publisheddate);
397
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
420
is($publisheddate, '1973-01-01');
398
is($publisheddate, '1973-01-01');
421
399
422
# TEST CASE - 1 issue per year, irregularities
400
# TEST CASE - 1 issue per year, irregularities
423
$subscription = {
401
$subscription = {
424
    periodicity => $id,
425
    firstacquidate => '1970-01-01',
402
    firstacquidate => '1970-01-01',
426
    irregularity => '2;4',
403
    irregularity => '2;4',
427
    countissuesperunit => 1,
404
    countissuesperunit => 1,
428
};
405
};
429
$publisheddate = $subscription->{firstacquidate};
406
$publisheddate = $subscription->{firstacquidate};
430
$publisheddate = GetNextDate($subscription, $publisheddate);
407
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
431
is($publisheddate, '1972-01-01');
408
is($publisheddate, '1972-01-01');
432
$publisheddate = GetNextDate($subscription, $publisheddate);
409
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
433
is($publisheddate, '1974-01-01');
410
is($publisheddate, '1974-01-01');
434
$publisheddate = GetNextDate($subscription, $publisheddate);
411
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
435
is($publisheddate, '1975-01-01');
412
is($publisheddate, '1975-01-01');
436
413
437
# TEST CASE - 1 issue every 2 years, no irregularity
414
# TEST CASE - 1 issue every 2 years, no irregularity
438
$id = AddSubscriptionFrequency({
415
$frequency = {
439
    description => "1 issue every 2 years",
416
    description => "1 issue every 2 years",
440
    unit => 'year',
417
    unit => 'year',
441
    issuesperunit => 1,
418
    issuesperunit => 1,
442
    unitsperissue => 2,
419
    unitsperissue => 2,
443
});
420
};
444
$subscription = {
421
$subscription = {
445
    periodicity => $id,
446
    firstacquidate => '1970-01-01',
422
    firstacquidate => '1970-01-01',
447
    irregularity => '',
423
    irregularity => '',
448
    countissuesperunit => 1,
424
    countissuesperunit => 1,
449
};
425
};
450
$publisheddate = $subscription->{firstacquidate};
426
$publisheddate = $subscription->{firstacquidate};
451
$publisheddate = GetNextDate($subscription, $publisheddate);
427
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
452
is($publisheddate, '1972-01-01');
428
is($publisheddate, '1972-01-01');
453
$publisheddate = GetNextDate($subscription, $publisheddate);
429
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
454
is($publisheddate, '1974-01-01');
430
is($publisheddate, '1974-01-01');
455
$publisheddate = GetNextDate($subscription, $publisheddate);
431
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
456
is($publisheddate, '1976-01-01');
432
is($publisheddate, '1976-01-01');
457
433
458
# TEST CASE - 1 issue every 2 years, irregularities
434
# TEST CASE - 1 issue every 2 years, irregularities
459
$subscription = {
435
$subscription = {
460
    periodicity => $id,
461
    firstacquidate => '1970-01-01',
436
    firstacquidate => '1970-01-01',
462
    irregularity => '2;4',
437
    irregularity => '2;4',
463
    countissuesperunit => 1,
438
    countissuesperunit => 1,
464
};
439
};
465
$publisheddate = $subscription->{firstacquidate};
440
$publisheddate = $subscription->{firstacquidate};
466
$publisheddate = GetNextDate($subscription, $publisheddate);
441
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
467
is($publisheddate, '1974-01-01');
442
is($publisheddate, '1974-01-01');
468
$publisheddate = GetNextDate($subscription, $publisheddate);
443
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
469
is($publisheddate, '1978-01-01');
444
is($publisheddate, '1978-01-01');
470
$publisheddate = GetNextDate($subscription, $publisheddate);
445
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
471
is($publisheddate, '1980-01-01');
446
is($publisheddate, '1980-01-01');
472
447
473
# TEST CASE - 2 issues per year, no irregularity
448
# TEST CASE - 2 issues per year, no irregularity
474
$id = AddSubscriptionFrequency({
449
$frequency = {
475
    description => "1 issue every 2 years",
450
    description => "1 issue every 2 years",
476
    unit => 'year',
451
    unit => 'year',
477
    issuesperunit => 2,
452
    issuesperunit => 2,
478
    unitsperissue => 1,
453
    unitsperissue => 1,
479
});
454
};
480
$subscription = {
455
$subscription = {
481
    periodicity => $id,
482
    firstacquidate => '1970-01-01',
456
    firstacquidate => '1970-01-01',
483
    irregularity => '',
457
    irregularity => '',
484
    countissuesperunit => 1,
458
    countissuesperunit => 1,
485
};
459
};
486
$publisheddate = $subscription->{firstacquidate};
460
$publisheddate = $subscription->{firstacquidate};
487
$publisheddate = GetNextDate($subscription, $publisheddate);
461
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
488
is($publisheddate, '1970-07-02');
462
is($publisheddate, '1970-07-02');
489
$publisheddate = GetNextDate($subscription, $publisheddate);
463
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
490
is($publisheddate, '1971-01-01');
464
is($publisheddate, '1971-01-01');
491
$publisheddate = GetNextDate($subscription, $publisheddate);
465
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
492
is($publisheddate, '1971-07-02');
466
is($publisheddate, '1971-07-02');
493
$publisheddate = GetNextDate($subscription, $publisheddate);
467
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
494
is($publisheddate, '1972-01-01');
468
is($publisheddate, '1972-01-01');
495
469
496
# TEST CASE - 2 issues per year, irregularities
470
# TEST CASE - 2 issues per year, irregularities
497
$subscription = {
471
$subscription = {
498
    periodicity => $id,
499
    firstacquidate => '1970-01-01',
472
    firstacquidate => '1970-01-01',
500
    irregularity => '3;5;6',
473
    irregularity => '3;5;6',
501
    countissuesperunit => 1,
474
    countissuesperunit => 1,
502
};
475
};
503
$publisheddate = $subscription->{firstacquidate};
476
$publisheddate = $subscription->{firstacquidate};
504
$publisheddate = GetNextDate($subscription, $publisheddate);
477
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
505
is($publisheddate, '1970-07-02');
478
is($publisheddate, '1970-07-02');
506
$publisheddate = GetNextDate($subscription, $publisheddate);
479
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
507
is($publisheddate, '1971-07-02');
480
is($publisheddate, '1971-07-02');
508
$publisheddate = GetNextDate($subscription, $publisheddate);
481
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
509
is($publisheddate, '1973-01-01');
482
is($publisheddate, '1973-01-01');
510
$publisheddate = GetNextDate($subscription, $publisheddate);
483
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
511
is($publisheddate, '1973-07-02');
484
is($publisheddate, '1973-07-02');
512
$publisheddate = GetNextDate($subscription, $publisheddate);
485
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
513
is($publisheddate, '1974-01-01');
486
is($publisheddate, '1974-01-01');
514
487
515
# TEST CASE - Irregular
488
# TEST CASE - Irregular
516
$id = AddSubscriptionFrequency({
489
$frequency = {
517
    description => "Irregular",
490
    description => "Irregular",
518
    unit => undef,
491
    unit => undef,
519
    issuesperunit => 1,
492
    issuesperunit => 1,
520
    unitsperissue => 1,
493
    unitsperissue => 1,
521
});
494
};
522
$subscription = {
495
$subscription = {
523
    periodicity => $id,
524
    firstacquidate => '1970-01-01',
496
    firstacquidate => '1970-01-01',
525
    irregularity => '',
497
    irregularity => '',
526
    countissuesperunit => 1,
498
    countissuesperunit => 1,
527
};
499
};
528
$publisheddate = $subscription->{firstacquidate};
500
$publisheddate = $subscription->{firstacquidate};
529
# GetNextDate always return undef if subscription is irregular
501
# GetNextDate always return undef if subscription is irregular
530
$publisheddate = GetNextDate($subscription, $publisheddate);
502
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
531
is($publisheddate, undef);
503
is($publisheddate, undef);
532
504
533
# GetNextDate returns undef if one of two first parameters is undef
505
# GetNextDate returns undef if one of two first parameters is undef
534
$publisheddate = GetNextDate($subscription, undef);
506
$publisheddate = GetNextDate($subscription, undef, $frequency);
535
is($publisheddate, undef);
507
is($publisheddate, undef);
536
$publisheddate = GetNextDate(undef, $subscription->{firstacquidate});
508
$publisheddate = GetNextDate(undef, $subscription->{firstacquidate}, $frequency);
537
is($publisheddate, undef);
509
is($publisheddate, undef);
538
$publisheddate = GetNextDate(undef, undef);
510
$publisheddate = GetNextDate(undef, undef, $frequency);
539
is($publisheddate, undef);
511
is($publisheddate, undef);
540
512
541
$dbh->rollback;
513
$dbh->rollback;
(-)a/t/db_dependent/Serials/GetNextSeq.t (-63 / +62 lines)
Lines 43-58 my $subscription = { Link Here
43
};
43
};
44
my $publisheddate = $subscription->{firstacquidate};
44
my $publisheddate = $subscription->{firstacquidate};
45
45
46
my $seq = _next_seq($subscription, $pattern, $publisheddate);
46
my $seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
47
is($seq, 'X: 2');
47
is($seq, 'X: 2');
48
$publisheddate = GetNextDate($subscription, $publisheddate);
48
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
49
$seq = _next_seq($subscription, $pattern, $publisheddate);
49
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
50
is($seq, 'X: 4');
50
is($seq, 'X: 4');
51
$publisheddate = GetNextDate($subscription, $publisheddate);
51
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
52
$seq = _next_seq($subscription, $pattern, $publisheddate);
52
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
53
is($seq, 'X: 2');
53
is($seq, 'X: 2');
54
$publisheddate = GetNextDate($subscription, $publisheddate);
54
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
55
$seq = _next_seq($subscription, $pattern, $publisheddate);
55
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
56
is($seq, 'X: 3');
56
is($seq, 'X: 3');
57
57
58
# TEST CASE 2 - 1 variable, use 'dayname' numbering, from 1 to 7
58
# TEST CASE 2 - 1 variable, use 'dayname' numbering, from 1 to 7
Lines 79-97 $pattern = { Link Here
79
79
80
$publisheddate = $subscription->{firstacquidate};
80
$publisheddate = $subscription->{firstacquidate};
81
81
82
$seq = _next_seq($subscription, $pattern, $publisheddate);
82
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
83
is($seq, 'X: Tuesday');
83
is($seq, 'X: Tuesday');
84
$publisheddate = GetNextDate($subscription, $publisheddate);
84
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
85
$seq = _next_seq($subscription, $pattern, $publisheddate);
85
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
86
is($seq, 'X: Friday');
86
is($seq, 'X: Friday');
87
$publisheddate = GetNextDate($subscription, $publisheddate);
87
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
88
$seq = _next_seq($subscription, $pattern, $publisheddate);
88
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
89
is($seq, 'X: Sunday');
89
is($seq, 'X: Sunday');
90
$publisheddate = GetNextDate($subscription, $publisheddate);
90
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
91
$seq = _next_seq($subscription, $pattern, $publisheddate);
91
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
92
is($seq, 'X: Monday');
92
is($seq, 'X: Monday');
93
$publisheddate = GetNextDate($subscription, $publisheddate);
93
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
94
$seq = _next_seq($subscription, $pattern, $publisheddate);
94
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
95
is($seq, 'X: Tuesday');
95
is($seq, 'X: Tuesday');
96
96
97
# TEST CASE 3 - 1 variable, use 'monthname' numbering, from 0 to 11 by step of 2
97
# TEST CASE 3 - 1 variable, use 'monthname' numbering, from 0 to 11 by step of 2
Lines 118-136 $pattern = { Link Here
118
118
119
$publisheddate = $subscription->{firstacquidate};
119
$publisheddate = $subscription->{firstacquidate};
120
120
121
$seq = _next_seq($subscription, $pattern, $publisheddate);
121
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
122
is($seq, 'X: March');
122
is($seq, 'X: March');
123
$publisheddate = GetNextDate($subscription, $publisheddate);
123
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
124
$seq = _next_seq($subscription, $pattern, $publisheddate);
124
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
125
is($seq, 'X: September');
125
is($seq, 'X: September');
126
$publisheddate = GetNextDate($subscription, $publisheddate);
126
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
127
$seq = _next_seq($subscription, $pattern, $publisheddate);
127
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
128
is($seq, 'X: January');
128
is($seq, 'X: January');
129
$publisheddate = GetNextDate($subscription, $publisheddate);
129
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
130
$seq = _next_seq($subscription, $pattern, $publisheddate);
130
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
131
is($seq, 'X: March');
131
is($seq, 'X: March');
132
$publisheddate = GetNextDate($subscription, $publisheddate);
132
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
133
$seq = _next_seq($subscription, $pattern, $publisheddate);
133
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
134
is($seq, 'X: May');
134
is($seq, 'X: May');
135
135
136
# TEST CASE 4 - 1 variable, use 'season' numbering, from 0 to 3
136
# TEST CASE 4 - 1 variable, use 'season' numbering, from 0 to 3
Lines 157-175 $pattern = { Link Here
157
157
158
$publisheddate = $subscription->{firstacquidate};
158
$publisheddate = $subscription->{firstacquidate};
159
159
160
$seq = _next_seq($subscription, $pattern, $publisheddate);
160
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
161
is($seq, 'X: Summer');
161
is($seq, 'X: Summer');
162
$publisheddate = GetNextDate($subscription, $publisheddate);
162
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
163
$seq = _next_seq($subscription, $pattern, $publisheddate);
163
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
164
is($seq, 'X: Spring');
164
is($seq, 'X: Spring');
165
$publisheddate = GetNextDate($subscription, $publisheddate);
165
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
166
$seq = _next_seq($subscription, $pattern, $publisheddate);
166
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
167
is($seq, 'X: Fall');
167
is($seq, 'X: Fall');
168
$publisheddate = GetNextDate($subscription, $publisheddate);
168
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
169
$seq = _next_seq($subscription, $pattern, $publisheddate);
169
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
170
is($seq, 'X: Winter');
170
is($seq, 'X: Winter');
171
$publisheddate = GetNextDate($subscription, $publisheddate);
171
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
172
$seq = _next_seq($subscription, $pattern, $publisheddate);
172
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
173
is($seq, 'X: Spring');
173
is($seq, 'X: Spring');
174
174
175
# TEST CASE 5 - 2 variables, from 1 to 12, and from 1 to 4
175
# TEST CASE 5 - 2 variables, from 1 to 12, and from 1 to 4
Lines 196-214 $pattern = { Link Here
196
196
197
$publisheddate = $subscription->{firstacquidate};
197
$publisheddate = $subscription->{firstacquidate};
198
198
199
$seq = _next_seq($subscription, $pattern, $publisheddate);
199
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
200
is($seq, 'Y: 1, X: 2');
200
is($seq, 'Y: 1, X: 2');
201
$publisheddate = GetNextDate($subscription, $publisheddate);
201
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
202
$seq = _next_seq($subscription, $pattern, $publisheddate);
202
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
203
is($seq, 'Y: 2, X: 1');
203
is($seq, 'Y: 2, X: 1');
204
$publisheddate = GetNextDate($subscription, $publisheddate);
204
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
205
$seq = _next_seq($subscription, $pattern, $publisheddate);
205
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
206
is($seq, 'Y: 2, X: 3');
206
is($seq, 'Y: 2, X: 3');
207
$publisheddate = GetNextDate($subscription, $publisheddate);
207
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
208
$seq = _next_seq($subscription, $pattern, $publisheddate);
208
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
209
is($seq, 'Y: 2, X: 4');
209
is($seq, 'Y: 2, X: 4');
210
$publisheddate = GetNextDate($subscription, $publisheddate);
210
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
211
$seq = _next_seq($subscription, $pattern, $publisheddate);
211
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
212
is($seq, 'Y: 3, X: 1');
212
is($seq, 'Y: 3, X: 1');
213
213
214
# TEST CASE 6 - 3 variables, from 1 to 12, from 1 to 8, and from 1 to 4
214
# TEST CASE 6 - 3 variables, from 1 to 12, from 1 to 8, and from 1 to 4
Lines 235-278 $pattern = { Link Here
235
235
236
$publisheddate = $subscription->{firstacquidate};
236
$publisheddate = $subscription->{firstacquidate};
237
237
238
$seq = _next_seq($subscription, $pattern, $publisheddate);
238
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
239
is($seq, 'Z: 1, Y: 1, X: 2');
239
is($seq, 'Z: 1, Y: 1, X: 2');
240
$publisheddate = GetNextDate($subscription, $publisheddate);
240
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
241
$seq = _next_seq($subscription, $pattern, $publisheddate);
241
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
242
is($seq, 'Z: 1, Y: 2, X: 1');
242
is($seq, 'Z: 1, Y: 2, X: 1');
243
$publisheddate = GetNextDate($subscription, $publisheddate);
243
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
244
$seq = _next_seq($subscription, $pattern, $publisheddate);
244
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
245
is($seq, 'Z: 1, Y: 2, X: 3');
245
is($seq, 'Z: 1, Y: 2, X: 3');
246
$publisheddate = GetNextDate($subscription, $publisheddate);
246
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
247
$seq = _next_seq($subscription, $pattern, $publisheddate);
247
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
248
is($seq, 'Z: 1, Y: 2, X: 4');
248
is($seq, 'Z: 1, Y: 2, X: 4');
249
for (1..100) {
249
for (1..100) {
250
    $publisheddate = GetNextDate($subscription, $publisheddate);
250
    $publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
251
    $seq = _next_seq($subscription, $pattern, $publisheddate);
251
    $seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
252
}
252
}
253
$publisheddate = GetNextDate($subscription, $publisheddate);
253
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
254
$seq = _next_seq($subscription, $pattern, $publisheddate);
254
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
255
is($seq, 'Z: 4, Y: 4, X: 1');
255
is($seq, 'Z: 4, Y: 4, X: 1');
256
# 110th is here
256
# 110th is here
257
$publisheddate = GetNextDate($subscription, $publisheddate);
257
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
258
$seq = _next_seq($subscription, $pattern, $publisheddate);
258
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
259
is($seq, 'Z: 4, Y: 4, X: 3');
259
is($seq, 'Z: 4, Y: 4, X: 3');
260
$publisheddate = GetNextDate($subscription, $publisheddate);
260
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
261
$seq = _next_seq($subscription, $pattern, $publisheddate);
261
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
262
is($seq, 'Z: 4, Y: 4, X: 4');
262
is($seq, 'Z: 4, Y: 4, X: 4');
263
$publisheddate = GetNextDate($subscription, $publisheddate);
263
$publisheddate = GetNextDate($subscription, $publisheddate, $frequency);
264
$seq = _next_seq($subscription, $pattern, $publisheddate);
264
$seq = _next_seq($subscription, $pattern, $frequency, $publisheddate);
265
is($seq, 'Z: 4, Y: 5, X: 1');
265
is($seq, 'Z: 4, Y: 5, X: 1');
266
266
267
267
268
$dbh->rollback;
268
$dbh->rollback;
269
269
270
sub _next_seq {
270
sub _next_seq {
271
    my ($subscription, $pattern, $publisheddate) = @_;
271
    my ($subscription, $pattern, $frequency, $publisheddate) = @_;
272
    my $seq;
272
    my $seq;
273
    ($seq, $subscription->{lastvalue1}, $subscription->{lastvalue2},
273
    ($seq, $subscription->{lastvalue1}, $subscription->{lastvalue2},
274
        $subscription->{lastvalue3}, $subscription->{innerloop1},
274
        $subscription->{lastvalue3}, $subscription->{innerloop1},
275
        $subscription->{innerloop2}, $subscription->{innerloop3}) =
275
        $subscription->{innerloop2}, $subscription->{innerloop3}) =
276
            GetNextSeq($subscription, $pattern, $publisheddate);
276
            GetNextSeq($subscription, $pattern, $frequency, $publisheddate);
277
    return $seq;
277
    return $seq;
278
}
278
}
279
- 

Return to bug 17047