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

(-)a/C4/Serials.pm (-84 / +89 lines)
Lines 2484-2489 sub GetFictiveIssueNumber { Link Here
2484
    return $issueno;
2484
    return $issueno;
2485
}
2485
}
2486
2486
2487
sub _get_next_date_day {
2488
    my ($subscription, $freqdata, $year, $month, $day) = @_;
2489
2490
    if ($subscription->{'countissuesperunit'} + 1 > $freqdata->{'issuesperunit'}){
2491
        ($year,$month,$day) = Add_Delta_Days($year,$month, $day , $freqdata->{'unitsperissue'} );
2492
        $subscription->{'countissuesperunit'} = 1;
2493
    } else {
2494
        $subscription->{'countissuesperunit'}++;
2495
    }
2496
2497
    return ($year, $month, $day);
2498
}
2499
2500
sub _get_next_date_week {
2501
    my ($subscription, $freqdata, $year, $month, $day) = @_;
2502
2503
    my ($wkno, $yr) = Week_of_Year($year, $month, $day);
2504
2505
    if ($subscription->{'countissuesperunit'} + 1 > $freqdata->{'issuesperunit'}){
2506
        $subscription->{'countissuesperunit'} = 1;
2507
        $wkno += $freqdata->{"unitsperissue"};
2508
        if($wkno > 52){
2509
            $wkno = $wkno % 52;
2510
            $yr++;
2511
        }
2512
        my $dow = Day_of_Week($year, $month, $day);
2513
        ($year,$month,$day) = Monday_of_Week($wkno, $yr);
2514
        if($freqdata->{'issuesperunit'} == 1) {
2515
            ($year, $month, $day) = Add_Delta_Days($year, $month, $day, $dow - 1);
2516
        }
2517
    } else {
2518
        $subscription->{'countissuesperunit'}++;
2519
    }
2520
2521
    return ($year, $month, $day);
2522
}
2523
2524
sub _get_next_date_month {
2525
    my ($subscription, $freqdata, $year, $month, $day) = @_;
2526
2527
    if ($subscription->{'countissuesperunit'} + 1 > $freqdata->{'issuesperunit'}){
2528
        $subscription->{'countissuesperunit'} = 1;
2529
        ($year,$month,$day) = Add_Delta_YM($year,$month,$day, 0,$freqdata->{"unitsperissue"});
2530
        unless($freqdata->{'issuesperunit'} == 1) {
2531
            $day = 1;   # Jumping to the first day of month, because we don't know what day is expected
2532
        }
2533
    } else {
2534
        $subscription->{'countissuesperunit'}++;
2535
    }
2536
2537
    return ($year, $month, $day);
2538
}
2539
2540
sub _get_next_date_year {
2541
    my ($subscription, $freqdata, $year, $month, $day) = @_;
2542
2543
    if ($subscription->{'countissuesperunit'} + 1 > $freqdata->{'issuesperunit'}){
2544
        $subscription->{'countissuesperunit'} = 1;
2545
        ($year,$month,$day) = Add_Delta_YM($year,$month,$day, $freqdata->{"unitsperissue"},0);
2546
        unless($freqdata->{'issuesperunit'} == 1) {
2547
            # Jumping to the first day of year, because we don't know what day is expected
2548
            $month = 1;
2549
            $day = 1;
2550
        }
2551
    } else {
2552
        $subscription->{'countissuesperunit'}++;
2553
    }
2554
2555
    return ($year, $month, $day);
2556
}
2557
2487
=head2 GetNextDate
2558
=head2 GetNextDate
2488
2559
2489
$resultdate = GetNextDate($publisheddate,$subscription)
2560
$resultdate = GetNextDate($publisheddate,$subscription)
Lines 2534-2640 sub GetNextDate { Link Here
2534
        my $unit = lc $freqdata->{'unit'};
2605
        my $unit = lc $freqdata->{'unit'};
2535
        if ($unit eq 'day') {
2606
        if ($unit eq 'day') {
2536
            while ($irregularities{$issueno}) {
2607
            while ($irregularities{$issueno}) {
2537
                if ($subscription->{'countissuesperunit'} + 1 > $freqdata->{'issuesperunit'}){
2608
                ($year, $month, $day) = _get_next_date_day($subscription,
2538
                    ($year,$month,$day) = Add_Delta_Days($year,$month, $day , $freqdata->{'unitsperissue'} );
2609
                    $freqdata, $year, $month, $day);
2539
                    $subscription->{'countissuesperunit'} = 1;
2540
                } else {
2541
                    $subscription->{'countissuesperunit'}++;
2542
                }
2543
                $issueno++;
2610
                $issueno++;
2544
            }
2611
            }
2545
            if ($subscription->{'countissuesperunit'} + 1 > $freqdata->{'issuesperunit'}){
2612
            ($year, $month, $day) = _get_next_date_day($subscription, $freqdata,
2546
                ($year,$month,$day) = Add_Delta_Days($year,$month, $day , $freqdata->{"unitsperissue"} );
2613
                $year, $month, $day);
2547
                $subscription->{'countissuesperunit'} = 1;
2548
            } else {
2549
                $subscription->{'countissuesperunit'}++;
2550
            }
2551
        }
2614
        }
2552
        elsif ($unit eq 'week') {
2615
        elsif ($unit eq 'week') {
2553
            my ($wkno, $yr) = Week_of_Year($year, $month, $day);
2554
            while ($irregularities{$issueno}) {
2616
            while ($irregularities{$issueno}) {
2555
                if ($subscription->{'countissuesperunit'} + 1 > $freqdata->{'issuesperunit'}){
2617
                ($year, $month, $day) = _get_next_date_week($subscription,
2556
                    $subscription->{'countissuesperunit'} = 1;
2618
                    $freqdata, $year, $month, $day);
2557
                    $wkno += $freqdata->{"unitsperissue"};
2558
                    if($wkno > 52){
2559
                        $wkno = $wkno % 52;
2560
                        $yr++;
2561
                    }
2562
                    my $dow = Day_of_Week($year, $month, $day);
2563
                    ($year,$month,$day) = Monday_of_Week($wkno, $yr);
2564
                    if($freqdata->{'issuesperunit'} == 1) {
2565
                        ($year, $month, $day) = Add_Delta_Days($year, $month, $day, $dow - 1);
2566
                    }
2567
                } else {
2568
                    $subscription->{'countissuesperunit'}++;
2569
                }
2570
                $issueno++;
2619
                $issueno++;
2571
            }
2620
            }
2572
            if ($subscription->{'countissuesperunit'} + 1 > $freqdata->{'issuesperunit'}){
2621
            ($year, $month, $day) = _get_next_date_week($subscription,
2573
                $subscription->{'countissuesperunit'} = 1;
2622
                $freqdata, $year, $month, $day);
2574
                $wkno += $freqdata->{"unitsperissue"};
2575
                if($wkno > 52){
2576
                    $wkno = $wkno % 52 ;
2577
                    $yr++;
2578
                }
2579
                my $dow = Day_of_Week($year, $month, $day);
2580
                ($year,$month,$day) = Monday_of_Week($wkno, $yr);
2581
                if($freqdata->{'issuesperunit'} == 1) {
2582
                    ($year, $month, $day) = Add_Delta_Days($year, $month, $day, $dow - 1);
2583
                }
2584
            } else {
2585
                $subscription->{'countissuesperunit'}++;
2586
            }
2587
        }
2623
        }
2588
        elsif ($unit eq 'month') {
2624
        elsif ($unit eq 'month') {
2589
            while ($irregularities{$issueno}) {
2625
            while ($irregularities{$issueno}) {
2590
                if ($subscription->{'countissuesperunit'} + 1 > $freqdata->{'issuesperunit'}){
2626
                ($year, $month, $day) = _get_next_date_month($subscription,
2591
                    $subscription->{'countissuesperunit'} = 1;
2627
                    $freqdata, $year, $month, $day);
2592
                    ($year,$month,$day) = Add_Delta_YM($year,$month,$day, 0,$freqdata->{"unitsperissue"});
2593
                    unless($freqdata->{'issuesperunit'} == 1) {
2594
                        $day = 1;   # Jumping to the first day of month, because we don't know what day is expected
2595
                    }
2596
                } else {
2597
                    $subscription->{'countissuesperunit'}++;
2598
                }
2599
                $issueno++;
2628
                $issueno++;
2600
            }
2629
            }
2601
            if ($subscription->{'countissuesperunit'} + 1 > $freqdata->{'issuesperunit'}){
2630
            ($year, $month, $day) = _get_next_date_month($subscription,
2602
                $subscription->{'countissuesperunit'} = 1;
2631
                $freqdata, $year, $month, $day);
2603
                ($year,$month,$day) = Add_Delta_YM($year,$month,$day, 0,$freqdata->{"unitsperissue"});
2604
                unless($freqdata->{'issuesperunit'} == 1) {
2605
                    $day = 1;   # Jumping to the first day of month, because we don't know what day is expected
2606
                }
2607
            } else {
2608
                $subscription->{'countissuesperunit'}++;
2609
            }
2610
        }
2632
        }
2611
        elsif ($unit eq 'year') {
2633
        elsif ($unit eq 'year') {
2612
            while ($irregularities{$issueno}) {
2634
            while ($irregularities{$issueno}) {
2613
                if ($subscription->{'countissuesperunit'} + 1 > $freqdata->{'issuesperunit'}){
2635
                ($year, $month, $day) = _get_next_date_year($subscription,
2614
                    $subscription->{'countissuesperunit'} = 1;
2636
                    $freqdata, $year, $month, $day);
2615
                    ($year,$month,$day) = Add_Delta_YM($year,$month,$day, $freqdata->{"unitsperissue"},0);
2616
                    unless($freqdata->{'issuesperunit'} == 1) {
2617
                        # Jumping to the first day of year, because we don't know what day is expected
2618
                        $month = 1;
2619
                        $day = 1;
2620
                    }
2621
                } else {
2622
                    $subscription->{'countissuesperunit'}++;
2623
                }
2624
                $issueno++;
2637
                $issueno++;
2625
            }
2638
            }
2626
            if ($subscription->{'countissuesperunit'} + 1 > $freqdata->{'issuesperunit'}){
2639
            ($year, $month, $day) = _get_next_date_year($subscription,
2627
                $subscription->{'countissuesperunit'} = 1;
2640
                $freqdata, $year, $month, $day);
2628
                ($year,$month,$day) = Add_Delta_YM($year,$month,$day, $freqdata->{"unitsperissue"},0);
2629
                unless($freqdata->{'issuesperunit'} == 1) {
2630
                    # Jumping to the first day of year, because we don't know what day is expected
2631
                    $month = 1;
2632
                    $day = 1;
2633
                }
2634
            } else {
2635
                $subscription->{'countissuesperunit'}++;
2636
            }
2637
        }
2641
        }
2642
2638
        if ($updatecount){
2643
        if ($updatecount){
2639
            my $dbh = C4::Context->dbh;
2644
            my $dbh = C4::Context->dbh;
2640
            my $query = qq{
2645
            my $query = qq{
Lines 2645-2650 sub GetNextDate { Link Here
2645
            my $sth = $dbh->prepare($query);
2650
            my $sth = $dbh->prepare($query);
2646
            $sth->execute($subscription->{'countissuesperunit'}, $subscription->{'subscriptionid'});
2651
            $sth->execute($subscription->{'countissuesperunit'}, $subscription->{'subscriptionid'});
2647
        }
2652
        }
2653
2648
        return sprintf("%04d-%02d-%02d", $year, $month, $day);
2654
        return sprintf("%04d-%02d-%02d", $year, $month, $day);
2649
    }
2655
    }
2650
}
2656
}
2651
- 

Return to bug 12671