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

(-)a/C4/Serials.pm (-26 / +41 lines)
Lines 1228-1264 sub ModSerialStatus { Link Here
1228
        }
1228
        }
1229
    }
1229
    }
1230
1230
1231
    # create new waited entry if needed (ie : was a "waited" and has changed)
1231
    # check if an alert must be sent... (= a letter is defined & status became "arrived"
1232
    if ( $oldstatus == 1 && $status != 1 ) {
1232
    my $subscription = GetSubscription($subscriptionid);
1233
        my $subscription = GetSubscription($subscriptionid);
1233
    if ( $subscription->{letter} && $status == 2 && $oldstatus != 2 ) {
1234
        my $pattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($subscription->{numberpattern});
1234
        require C4::Letters;
1235
1235
        C4::Letters::SendAlerts( 'issue', $subscription->{subscriptionid}, $subscription->{letter} );
1236
        # next issue number
1237
        my (
1238
            $newserialseq,  $newlastvalue1, $newlastvalue2, $newlastvalue3,
1239
            $newinnerloop1, $newinnerloop2, $newinnerloop3
1240
          )
1241
          = GetNextSeq( $subscription, $pattern, $publisheddate );
1242
1243
        # next date (calculated from actual date & frequency parameters)
1244
        my $nextpublisheddate = GetNextDate($subscription, $publisheddate, 1);
1245
        my $nextpubdate = $nextpublisheddate;
1246
        NewIssue( $newserialseq, $subscriptionid, $subscription->{'biblionumber'}, 1, $nextpubdate, $nextpubdate );
1247
        $query = "UPDATE subscription SET lastvalue1=?, lastvalue2=?, lastvalue3=?, innerloop1=?, innerloop2=?, innerloop3=?
1248
                    WHERE  subscriptionid = ?";
1249
        $sth = $dbh->prepare($query);
1250
        $sth->execute( $newlastvalue1, $newlastvalue2, $newlastvalue3, $newinnerloop1, $newinnerloop2, $newinnerloop3, $subscriptionid );
1251
1252
        # check if an alert must be sent... (= a letter is defined & status became "arrived"
1253
        if ( $subscription->{letter} && $status == 2 && $oldstatus != 2 ) {
1254
            require C4::Letters;
1255
            C4::Letters::SendAlerts( 'issue', $subscription->{subscriptionid}, $subscription->{letter} );
1256
        }
1257
    }
1236
    }
1258
1237
1259
    return;
1238
    return;
1260
}
1239
}
1261
1240
1241
=head2 GenerateNewIssue
1242
1243
GenerateNewIssue($subscriptionid)
1244
1245
Autogenerate a new issue to serial subscription.
1246
1247
=cut
1248
1249
sub GenerateNewIssue {
1250
    my $dbh   = C4::Context->dbh;
1251
    my ($subscriptionid) = @_;
1252
    require C4::Serials::Numberpattern;
1253
    my $subscription = GetSubscription($subscriptionid);
1254
    my $pattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($subscription->{numberpattern});
1255
    my $expected = GetNextExpected($subscriptionid);
1256
    my (
1257
         $newserialseq,  $newlastvalue1, $newlastvalue2, $newlastvalue3,
1258
         $newinnerloop1, $newinnerloop2, $newinnerloop3
1259
    ) = GetNextSeq($subscription, $pattern, $expected->{publisheddate});
1260
1261
     ## We generate the next publication date
1262
     my $nextpublisheddate = GetNextDate($subscription, $expected->{publisheddate}, 1);
1263
     ## Creating the new issue
1264
     NewIssue( $newserialseq, $subscriptionid, $subscription->{'biblionumber'},
1265
             1, $nextpublisheddate, $nextpublisheddate );
1266
1267
     ## Updating the subscription seq status
1268
     my $squery = "UPDATE subscription SET lastvalue1=?, lastvalue2=?, lastvalue3=?, innerloop1=?, innerloop2=?, innerloop3=?
1269
                 WHERE  subscriptionid = ?";
1270
     my $seqsth = $dbh->prepare($squery);
1271
     $seqsth->execute(
1272
         $newlastvalue1, $newlastvalue2, $newlastvalue3, $newinnerloop1,
1273
         $newinnerloop2, $newinnerloop3, $subscriptionid
1274
         );
1275
}
1276
1262
=head2 GetNextExpected
1277
=head2 GetNextExpected
1263
1278
1264
$nextexpected = GetNextExpected($subscriptionid)
1279
$nextexpected = GetNextExpected($subscriptionid)
(-)a/serials/serials-collection.pl (-24 / +1 lines)
Lines 67-96 if($op eq 'gennext' && @subscriptionid){ Link Here
67
                    $issue->{planneddate}, $issue->{publisheddate},
67
                    $issue->{planneddate}, $issue->{publisheddate},
68
                    $status, "" );
68
                    $status, "" );
69
        } else {
69
        } else {
70
            require C4::Serials::Numberpattern;
70
            C4::Serials::GenerateNewIssue($subscriptionid);
71
            my $subscription = GetSubscription($subscriptionid);
72
            my $pattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($subscription->{numberpattern});
73
            my $expected = GetNextExpected($subscriptionid);
74
            my (
75
                 $newserialseq,  $newlastvalue1, $newlastvalue2, $newlastvalue3,
76
                 $newinnerloop1, $newinnerloop2, $newinnerloop3
77
            ) = GetNextSeq($subscription, $pattern, $expected->{publisheddate});
78
79
             ## We generate the next publication date
80
             my $nextpublisheddate = GetNextDate($subscription, $expected->{publisheddate}, 1);
81
             ## Creating the new issue
82
             NewIssue( $newserialseq, $subscriptionid, $subscription->{'biblionumber'},
83
                     1, $nextpublisheddate, $nextpublisheddate );
84
85
             ## Updating the subscription seq status
86
             my $squery = "UPDATE subscription SET lastvalue1=?, lastvalue2=?, lastvalue3=?, innerloop1=?, innerloop2=?, innerloop3=?
87
                         WHERE  subscriptionid = ?";
88
             my $seqsth = $dbh->prepare($squery);
89
             $seqsth->execute(
90
                 $newlastvalue1, $newlastvalue2, $newlastvalue3, $newinnerloop1,
91
                 $newinnerloop2, $newinnerloop3, $subscriptionid
92
                 );
93
94
        }
71
        }
95
        last if $nbissues == 1;
72
        last if $nbissues == 1;
96
        last if HasSubscriptionExpired($subscriptionid) > 0;
73
        last if HasSubscriptionExpired($subscriptionid) > 0;
(-)a/serials/serials-edit.pl (-1 / +9 lines)
Lines 283-288 if ( $op and $op eq 'serialchangestatus' ) { Link Here
283
            push @{ $itemhash{ $itemid[$i] }->{'ind_tag'} },   $ind_tag[$i];
283
            push @{ $itemhash{ $itemid[$i] }->{'ind_tag'} },   $ind_tag[$i];
284
            push @{ $itemhash{ $itemid[$i] }->{'indicator'} }, $indicator[$i];
284
            push @{ $itemhash{ $itemid[$i] }->{'indicator'} }, $indicator[$i];
285
        }
285
        }
286
287
        my $isAdded = 0;
286
        foreach my $item ( keys %itemhash ) {
288
        foreach my $item ( keys %itemhash ) {
287
289
288
       # Verify Itemization is "Valid", i.e. serial status is Arrived or Missing
290
       # Verify Itemization is "Valid", i.e. serial status is Arrived or Missing
Lines 296-302 if ( $op and $op eq 'serialchangestatus' ) { Link Here
296
                    $index = $i
298
                    $index = $i
297
                  }
299
                  }
298
            }
300
            }
299
            if ( $index >= 0 && $status[$index] == 2 ) {
301
            if ( $index >= 0 && $status[$index] == 2  && !C4::Items::GetItem($itemid[$index]) ) {
302
                if (!$isAdded) {
303
                    if (!abouttoexpire($subscriptionids[0])) {
304
                        C4::Serials::GenerateNewIssue($subscriptionids[0]);
305
                        $isAdded = 1;
306
                    }
307
                }
300
                my $xml = TransformHtmlToXml(
308
                my $xml = TransformHtmlToXml(
301
                    $itemhash{$item}->{'tags'},
309
                    $itemhash{$item}->{'tags'},
302
                    $itemhash{$item}->{'subfields'},
310
                    $itemhash{$item}->{'subfields'},
(-)a/serials/serials-recieve.pl (-1 / +7 lines)
Lines 129-135 if ($op eq 'serialchangestatus') { Link Here
129
129
130
        my ($oldstatus) = $sth->fetchrow;
130
        my ($oldstatus) = $sth->fetchrow;
131
        if ($serialids[$i]) {
131
        if ($serialids[$i]) {
132
            ModSerialStatus($serialids[$i],$serialseqs[$i],format_date_in_iso($planneddates[$i]),format_date_in_iso($publisheddates[$i]),$status[$i],$notes[$i]) unless ($hassubscriptionexpired && $oldstatus == 1);
132
            unless ($hassubscriptionexpired && $oldstatus == 1) {
133
                ModSerialStatus($serialids[$i],$serialseqs[$i],format_date_in_iso($planneddates[$i]),format_date_in_iso($publisheddates[$i]),$status[$i],$notes[$i]);
134
                if (!$abouttoexpire) {
135
                    C4::Serials::GenerateNewIssue($subscriptionid);
136
                } 
137
            }
138
133
            if (($status[$i]==2) && C4::Context->preference("serialsadditems")){
139
            if (($status[$i]==2) && C4::Context->preference("serialsadditems")){
134
                my %info;
140
                my %info;
135
                $info{branch}=$homebranches[$i];
141
                $info{branch}=$homebranches[$i];
(-)a/t/db_dependent/Serials.t (+1 lines)
Lines 214-219 for my $status ( @statuses ) { Link Here
214
    my $serialseq = "No.".$counter;
214
    my $serialseq = "No.".$counter;
215
    my ( $expected_serial ) = GetSerials2( $subscriptionid, 1 );
215
    my ( $expected_serial ) = GetSerials2( $subscriptionid, 1 );
216
    C4::Serials::ModSerialStatus( $expected_serial->{serialid}, $serialseq, $publisheddate, $publisheddate, $statuses[$counter], 'an useless note' );
216
    C4::Serials::ModSerialStatus( $expected_serial->{serialid}, $serialseq, $publisheddate, $publisheddate, $statuses[$counter], 'an useless note' );
217
    C4::Serials::GenerateNewIssue($subscriptionid);
217
    $counter++;
218
    $counter++;
218
}
219
}
219
# Here we have 15 serials with statuses : 2*2 + 5*3 + 2*4 + 1*41 + 1*42 + 1*43 + 1*44 + 1*5 + 1*1
220
# Here we have 15 serials with statuses : 2*2 + 5*3 + 2*4 + 1*41 + 1*42 + 1*43 + 1*44 + 1*5 + 1*1
(-)a/t/lib/TestObjects/Serial/SubscriptionFactory.pm (-1 / +2 lines)
Lines 260-265 sub receiveDefaultSerials { Link Here
260
                                     2, #Status => 2 == Received
260
                                     2, #Status => 2 == Received
261
                                     $waitingSerial->{notes},
261
                                     $waitingSerial->{notes},
262
                                    );
262
                                    );
263
        C4::Serials::GenerateNewIssue($subscription->subscriptionid);
264
263
        my $items = t::lib::TestObjects::ItemFactory->createTestGroup({barcode => $waitingSerial->{serialid}."-".Koha::DateUtils::dt_from_string($waitingSerial->{publisheddate})->ymd('-'),
265
        my $items = t::lib::TestObjects::ItemFactory->createTestGroup({barcode => $waitingSerial->{serialid}."-".Koha::DateUtils::dt_from_string($waitingSerial->{publisheddate})->ymd('-'),
264
                                                                       enumchron => $waitingSerial->{serialseq},
266
                                                                       enumchron => $waitingSerial->{serialseq},
265
                                                                       biblionumber => $subscription->biblionumber,
267
                                                                       biblionumber => $subscription->biblionumber,
266
- 

Return to bug 15055