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

(-)a/Koha/Patron.pm (+47 lines)
Lines 21-26 package Koha::Patron; Link Here
21
use Modern::Perl;
21
use Modern::Perl;
22
22
23
use List::MoreUtils    qw( any none uniq notall zip6);
23
use List::MoreUtils    qw( any none uniq notall zip6);
24
use Scalar::Util       qw( looks_like_number );
24
use JSON               qw( to_json );
25
use JSON               qw( to_json );
25
use Scalar::Util       qw(looks_like_number);
26
use Scalar::Util       qw(looks_like_number);
26
use Unicode::Normalize qw( NFKD );
27
use Unicode::Normalize qw( NFKD );
Lines 1663-1668 sub add_enrolment_fee_if_needed { Link Here
1663
    return $enrolment_fee || 0;
1664
    return $enrolment_fee || 0;
1664
}
1665
}
1665
1666
1667
=head3 add_print_notice_charge_if_needed
1668
1669
my $result = $patron->add_print_notice_charge_if_needed($params);
1670
1671
Add a print notice charge for a patron if needed.
1672
1673
$params - hash reference containing:
1674
  - amount: charge amount (optional, uses system preference if not provided)
1675
  - notice_code: the notice code for the charge description
1676
  - library_id: library branch for the charge (optional)
1677
1678
Returns the account line object if a charge was added, undef otherwise.
1679
1680
=cut
1681
1682
sub add_print_notice_charge_if_needed {
1683
    my ( $self, $params ) = @_;
1684
1685
    return unless $params && ref($params) eq 'HASH';
1686
1687
    # Get charge amount from patron category (0 = disabled)
1688
    my $charge_amount = defined $params->{amount} ? $params->{amount} : $self->category->print_notice_charge;
1689
1690
    # Return early for invalid amounts
1691
    return unless defined $charge_amount;
1692
    return unless Scalar::Util::looks_like_number($charge_amount);
1693
    return unless $charge_amount > 0;
1694
1695
    my $userenv = C4::Context->userenv;
1696
    my $library_id = $params->{library_id} || ($userenv ? $userenv->{branch} : undef);
1697
1698
    my $result;
1699
    try {
1700
        $result = $self->account->add_debit({
1701
            amount      => $charge_amount,
1702
            type        => 'PRINT_NOTICE',
1703
            interface   => C4::Context->interface,
1704
            library_id  => $library_id,
1705
        });
1706
    } catch {
1707
        return;
1708
    };
1709
1710
    return $result;
1711
}
1712
1666
=head3 checkouts
1713
=head3 checkouts
1667
1714
1668
my $checkouts = $patron->checkouts
1715
my $checkouts = $patron->checkouts
(-)a/admin/categories.pl (+3 lines)
Lines 63-68 if ( $op eq 'add_form' ) { Link Here
63
    my $upperagelimit                          = $input->param('upperagelimit');
63
    my $upperagelimit                          = $input->param('upperagelimit');
64
    my $dateofbirthrequired                    = $input->param('dateofbirthrequired');
64
    my $dateofbirthrequired                    = $input->param('dateofbirthrequired');
65
    my $enrolmentfee                           = $input->param('enrolmentfee');
65
    my $enrolmentfee                           = $input->param('enrolmentfee');
66
    my $print_notice_charge                    = $input->param('print_notice_charge');
66
    my $hidelostitems                          = $input->param('hidelostitems');
67
    my $hidelostitems                          = $input->param('hidelostitems');
67
    my $overduenoticerequired                  = $input->param('overduenoticerequired');
68
    my $overduenoticerequired                  = $input->param('overduenoticerequired');
68
    my $category_type                          = $input->param('category_type');
69
    my $category_type                          = $input->param('category_type');
Lines 102-107 if ( $op eq 'add_form' ) { Link Here
102
        $category->upperagelimit($upperagelimit);
103
        $category->upperagelimit($upperagelimit);
103
        $category->dateofbirthrequired($dateofbirthrequired);
104
        $category->dateofbirthrequired($dateofbirthrequired);
104
        $category->enrolmentfee($enrolmentfee);
105
        $category->enrolmentfee($enrolmentfee);
106
        $category->print_notice_charge($print_notice_charge);
105
        $category->hidelostitems($hidelostitems);
107
        $category->hidelostitems($hidelostitems);
106
        $category->overduenoticerequired($overduenoticerequired);
108
        $category->overduenoticerequired($overduenoticerequired);
107
        $category->category_type($category_type);
109
        $category->category_type($category_type);
Lines 140-145 if ( $op eq 'add_form' ) { Link Here
140
                upperagelimit                          => $upperagelimit,
142
                upperagelimit                          => $upperagelimit,
141
                dateofbirthrequired                    => $dateofbirthrequired,
143
                dateofbirthrequired                    => $dateofbirthrequired,
142
                enrolmentfee                           => $enrolmentfee,
144
                enrolmentfee                           => $enrolmentfee,
145
                print_notice_charge                    => $print_notice_charge,
143
                hidelostitems                          => $hidelostitems,
146
                hidelostitems                          => $hidelostitems,
144
                overduenoticerequired                  => $overduenoticerequired,
147
                overduenoticerequired                  => $overduenoticerequired,
145
                category_type                          => $category_type,
148
                category_type                          => $category_type,
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categories.tt (+14 lines)
Lines 204-209 Link Here
204
                            [% END %]
204
                            [% END %]
205
                        </select>
205
                        </select>
206
                    </li>
206
                    </li>
207
                    <li>
208
                        <label for="print_notice_charge">Print notice charge: </label>
209
                        <input type="text" name="print_notice_charge" id="print_notice_charge" size="6" value="[% category.print_notice_charge | $Price on_editing => 1 %]" />
210
                        <div class="hint">Charge for print notices (0.00 = disabled)</div>
211
                    </li>
212
207
                    <li>
213
                    <li>
208
                        <label for="category_type" class="required">Category type: </label>
214
                        <label for="category_type" class="required">Category type: </label>
209
                        <select name="category_type" id="category_type">
215
                        <select name="category_type" id="category_type">
Lines 567-572 Link Here
567
                <tr><th scope="row">Enrollment fee: </th><td>[% category.enrolmentfee | $Price %]</td></tr>
573
                <tr><th scope="row">Enrollment fee: </th><td>[% category.enrolmentfee | $Price %]</td></tr>
568
                <tr><th scope="row">Receives overdue notices: </th><td>[% IF category. overduenoticerequired %]Yes[% ELSE %]No[% END %]</td></tr>
574
                <tr><th scope="row">Receives overdue notices: </th><td>[% IF category. overduenoticerequired %]Yes[% ELSE %]No[% END %]</td></tr>
569
                <tr><th scope="row">Lost items in staff interface:</th><td>[% IF category.hidelostitems %]Hidden by default[% ELSE %]Shown[% END %]</td></tr>
575
                <tr><th scope="row">Lost items in staff interface:</th><td>[% IF category.hidelostitems %]Hidden by default[% ELSE %]Shown[% END %]</td></tr>
576
                <tr><th scope="row">Print notice charge: </th><td>[% IF category.print_notice_charge > 0 %][% category.print_notice_charge | $Price %][% ELSE %]Disabled[% END %]</td></tr>
570
577
571
                [% IF ( Koha.Preference('CheckPrevCheckout') == 'softyes' || Koha.Preference('CheckPrevCheckout') == 'softno' ) %]
578
                [% IF ( Koha.Preference('CheckPrevCheckout') == 'softyes' || Koha.Preference('CheckPrevCheckout') == 'softno' ) %]
572
                    <tr>
579
                    <tr>
Lines 647-652 Link Here
647
                            <th scope="col" data-colname="enrollment_fee">Enrollment fee</th>
654
                            <th scope="col" data-colname="enrollment_fee">Enrollment fee</th>
648
                            <th scope="col" data-colname="overdue">Overdue</th>
655
                            <th scope="col" data-colname="overdue">Overdue</th>
649
                            <th scope="col" data-colname="lost_items">Lost items</th>
656
                            <th scope="col" data-colname="lost_items">Lost items</th>
657
                            <th scope="col" data-colname="print_notice_charge">Print notice charge</th>
658
650
                            [% IF ( EnhancedMessagingPreferences ) %]
659
                            [% IF ( EnhancedMessagingPreferences ) %]
651
                                <th scope="col" data-colname="messaging">Messaging</th>
660
                                <th scope="col" data-colname="messaging">Messaging</th>
652
                            [% END %]
661
                            [% END %]
Lines 720-725 Link Here
720
                                [% END %]
729
                                [% END %]
721
                                <td>[% IF ( category.overduenoticerequired ) %]Yes[% ELSE %]No[% END %]</td>
730
                                <td>[% IF ( category.overduenoticerequired ) %]Yes[% ELSE %]No[% END %]</td>
722
                                <td>[% IF ( category.hidelostitems ) %]Hidden[% ELSE %]Shown[% END %]</td>
731
                                <td>[% IF ( category.hidelostitems ) %]Hidden[% ELSE %]Shown[% END %]</td>
732
                                [% IF (category.print_notice_charge > 0) %]
733
                                    <td>[% category.print_notice_charge | $Price %]</td>
734
                                [% ELSE %]
735
                                    <td>-</td>
736
                                [% END %]
723
                                [% IF Koha.Preference('EnhancedMessagingPreferences') %]
737
                                [% IF Koha.Preference('EnhancedMessagingPreferences') %]
724
                                    <td style="white-space: nowrap; font-size:80%;">
738
                                    <td style="white-space: nowrap; font-size:80%;">
725
                                        [% SET default_messaging = category.default_messaging %]
739
                                        [% SET default_messaging = category.default_messaging %]
(-)a/misc/cronjobs/gather_print_notices.pl (-4 / +2 lines)
Lines 205-211 sub print_notices { Link Here
205
        if ( $send ) {
205
        if ( $send ) {
206
            foreach my $message ( @$branch_messages ) {
206
            foreach my $message ( @$branch_messages ) {
207
                # Apply print notice charges if enabled
207
                # Apply print notice charges if enabled
208
                if (!$skip_charges && C4::Context->preference('PrintNoticeCharging')) {
208
                if (!$skip_charges) {
209
                    apply_print_notice_charge($message);
209
                    apply_print_notice_charge($message);
210
                }
210
                }
211
211
Lines 382-389 sub apply_print_notice_charge { Link Here
382
    }
382
    }
383
383
384
    eval {
384
    eval {
385
        my $account = Koha::Account->new({ patron_id => $patron->borrowernumber });
385
        my $result = $patron->add_print_notice_charge_if_needed({
386
        $account->add_print_notice_charge({
387
            notice_code => $message->{letter_code},
386
            notice_code => $message->{letter_code},
388
            library_id  => $message->{branchcode},
387
            library_id  => $message->{branchcode},
389
        });
388
        });
390
- 

Return to bug 4858