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

(-)a/C4/Members.pm (+19 lines)
Lines 104-109 BEGIN { Link Here
104
        GetBorrowersWithEmail
104
        GetBorrowersWithEmail
105
105
106
        HasOverdues
106
        HasOverdues
107
        GetOverdues
107
    );
108
    );
108
109
109
    #Modify data
110
    #Modify data
Lines 2493-2498 sub HasOverdues { Link Here
2493
    return $count;
2494
    return $count;
2494
}
2495
}
2495
2496
2497
sub GetOverdues {
2498
    my ( $borrowernumber ) = @_;
2499
2500
    my $sql = "
2501
        SELECT biblio.*, items.*, issues.*, biblioitems.itemtype, TO_DAYS(NOW())-TO_DAYS(date_due) AS days_overdue
2502
        FROM issues,items,biblio, biblioitems
2503
        WHERE items.itemnumber=issues.itemnumber
2504
          AND biblio.biblionumber   = items.biblionumber
2505
          AND biblio.biblionumber   = biblioitems.biblionumber
2506
          AND issues.borrowernumber = ?
2507
    ";
2508
2509
    my $sth = C4::Context->dbh->prepare( $sql );
2510
    $sth->execute( $borrowernumber );
2511
2512
    return $sth->fetchall_arrayref({});
2513
}
2514
2496
END { }    # module clean-up code here (global destructor)
2515
END { }    # module clean-up code here (global destructor)
2497
2516
2498
1;
2517
1;
(-)a/C4/Overdues.pm (+71 lines)
Lines 24-35 use strict; Link Here
24
use Date::Calc qw/Today Date_to_Days/;
24
use Date::Calc qw/Today Date_to_Days/;
25
use Date::Manip qw/UnixDate/;
25
use Date::Manip qw/UnixDate/;
26
use List::MoreUtils qw( uniq );
26
use List::MoreUtils qw( uniq );
27
use Locale::Currency::Format 1.28;
27
28
28
use C4::Circulation;
29
use C4::Circulation;
29
use C4::Context;
30
use C4::Context;
30
use C4::Accounts;
31
use C4::Accounts;
31
use C4::Log; # logaction
32
use C4::Log; # logaction
32
use C4::Debug;
33
use C4::Debug;
34
use C4::Budgets qw(GetCurrency);
33
35
34
use vars qw($VERSION @ISA @EXPORT);
36
use vars qw($VERSION @ISA @EXPORT);
35
37
Lines 53-58 BEGIN { Link Here
53
        &RemoveNotifyLine
55
        &RemoveNotifyLine
54
        &AddNotifyLine
56
        &AddNotifyLine
55
        &GetOverdueMessageTransportTypes
57
        &GetOverdueMessageTransportTypes
58
        &parse_letter
56
	);
59
	);
57
	# subs to remove
60
	# subs to remove
58
	push @EXPORT, qw(
61
	push @EXPORT, qw(
Lines 947-952 sub GetOverdueMessageTransportTypes { Link Here
947
    return \@mtts;
950
    return \@mtts;
948
}
951
}
949
952
953
=head2 parse_letter
954
955
parses the letter template, replacing the placeholders with data
956
specific to this patron, biblio, or item for overdues
957
958
named parameters:
959
  letter - required hashref
960
  borrowernumber - required integer
961
  substitute - optional hashref of other key/value pairs that should
962
    be substituted in the letter content
963
964
returns the C<letter> hashref, with the content updated to reflect the
965
substituted keys and values.
966
967
=cut
968
969
sub parse_letter {
970
    my $params = shift;
971
    foreach my $required (qw( letter_code borrowernumber )) {
972
        return unless ( exists $params->{$required} && $params->{$required} );
973
    }
974
975
    my $substitute = $params->{'substitute'} || {};
976
    $substitute->{today} ||= C4::Dates->new()->output("syspref");
977
978
    my %tables = ( 'borrowers' => $params->{'borrowernumber'} );
979
    if ( my $p = $params->{'branchcode'} ) {
980
        $tables{'branches'} = $p;
981
    }
982
983
    my $currencies = GetCurrency();
984
    my $currency_format;
985
    $currency_format = $currencies->{currency} if defined($currencies);
986
987
    my @item_tables;
988
    if ( my $i = $params->{'items'} ) {
989
        my $item_format = '';
990
        foreach my $item (@$i) {
991
            my $fine = GetFine($item->{'itemnumber'}, $params->{'borrowernumber'});
992
            if ( !$item_format and defined $params->{'letter'}->{'content'} ) {
993
                $params->{'letter'}->{'content'} =~ m/(<item>.*<\/item>)/;
994
                $item_format = $1;
995
            }
996
997
            $item->{'fine'} = currency_format($currency_format, "$fine", FMT_SYMBOL);
998
            # if active currency isn't correct ISO code fallback to sprintf
999
            $item->{'fine'} = sprintf('%.2f', $fine) unless $item->{'fine'};
1000
1001
            push @item_tables, {
1002
                'biblio' => $item->{'biblionumber'},
1003
                'biblioitems' => $item->{'biblionumber'},
1004
                'items' => $item,
1005
                'issues' => $item->{'itemnumber'},
1006
            };
1007
        }
1008
    }
1009
1010
    return C4::Letters::GetPreparedLetter (
1011
        module => 'circulation',
1012
        letter_code => $params->{'letter_code'},
1013
        branchcode => $params->{'branchcode'},
1014
        tables => \%tables,
1015
        substitute => $substitute,
1016
        repeat => { item => \@item_tables },
1017
        message_transport_type => $params->{message_transport_type},
1018
    );
1019
}
1020
950
1;
1021
1;
951
__END__
1022
__END__
952
1023
(-)a/Koha/Template/Plugin/Borrowers.pm (-1 / +11 lines)
Lines 22-28 use Modern::Perl; Link Here
22
22
23
use base qw( Template::Plugin );
23
use base qw( Template::Plugin );
24
24
25
use Koha::Borrower::Debarments qw//;
25
use Koha::Borrower::Debarments qw();
26
use C4::Members qw(HasOverdues);
26
27
27
=pod
28
=pod
28
29
Lines 48-51 sub IsDebarred { Link Here
48
    return Koha::Borrower::Debarments::IsDebarred($borrower->{borrowernumber});
49
    return Koha::Borrower::Debarments::IsDebarred($borrower->{borrowernumber});
49
}
50
}
50
51
52
sub HasOverdues {
53
    my ( $self, $borrowernumber ) = @_;
54
55
    return unless $borrowernumber;
56
57
    return C4::Members::HasOverdues($borrowernumber);
58
}
59
60
51
1;
61
1;
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc (-1 / +10 lines)
Lines 1-3 Link Here
1
[% USE Borrowers %]
1
<script type="text/javascript">
2
<script type="text/javascript">
2
//<![CDATA[
3
//<![CDATA[
3
$(document).ready(function(){
4
$(document).ready(function(){
Lines 38-43 $(document).ready(function(){ Link Here
38
        $(".btn-group").removeClass("open");
39
        $(".btn-group").removeClass("open");
39
        return false;
40
        return false;
40
    });
41
    });
42
    $("#print_overdues").click(function(){
43
        window.open("/cgi-bin/koha/members/print_overdues.pl?borrowernumber=[% borrowernumber %]", "printwindow");
44
        $(".btn-group").removeClass("open");
45
        return false;
46
    });
41
    $("#searchtohold").click(function(){
47
    $("#searchtohold").click(function(){
42
        searchToHold();
48
        searchToHold();
43
        return false;
49
        return false;
Lines 123-129 function searchToHold(){ Link Here
123
            <ul class="dropdown-menu">
129
            <ul class="dropdown-menu">
124
                [% IF ( CAN_user_borrowers ) %]<li><a id="printsummary" href="#">Print summary</a></li>[% END %]
130
                [% IF ( CAN_user_borrowers ) %]<li><a id="printsummary" href="#">Print summary</a></li>[% END %]
125
                <li><a id="printslip" href="#">Print slip</a></li>
131
                <li><a id="printslip" href="#">Print slip</a></li>
126
                <li><a id="printquickslip" href="#">Print quick slip</a></li>
132
                <li><a id="printquickslip" href="#">Print quick slip[%  Borrowers.HasOverdues( borrowernumber ) %]</a></li>
133
                [% IF Borrowers.HasOverdues( borrowernumber ) %]
134
                    <li><a id="print_overdues" href="#">Print overdues</a></li>
135
                [% END %]
127
            </ul>
136
            </ul>
128
    </div>
137
    </div>
129
    <a id="searchtohold" class="btn btn-small" href="#"><i class="icon-search"></i> Search to hold</a>
138
    <a id="searchtohold" class="btn btn-small" href="#"><i class="icon-search"></i> Search to hold</a>
(-)a/misc/cronjobs/overdue_notices.pl (-71 lines)
Lines 40-46 use C4::Dates qw/format_date/; Link Here
40
use C4::Debug;
40
use C4::Debug;
41
use C4::Letters;
41
use C4::Letters;
42
use C4::Overdues qw(GetFine GetOverdueMessageTransportTypes);
42
use C4::Overdues qw(GetFine GetOverdueMessageTransportTypes);
43
use C4::Budgets qw(GetCurrency);
44
43
45
use Koha::Borrower::Debarments qw(AddUniqueDebarment);
44
use Koha::Borrower::Debarments qw(AddUniqueDebarment);
46
use Koha::DateUtils;
45
use Koha::DateUtils;
Lines 795-869 if ( defined $htmlfilename ) { Link Here
795
794
796
These methods are internal to the operation of overdue_notices.pl.
795
These methods are internal to the operation of overdue_notices.pl.
797
796
798
=head2 parse_letter
799
800
parses the letter template, replacing the placeholders with data
801
specific to this patron, biblio, or item
802
803
named parameters:
804
  letter - required hashref
805
  borrowernumber - required integer
806
  substitute - optional hashref of other key/value pairs that should
807
    be substituted in the letter content
808
809
returns the C<letter> hashref, with the content updated to reflect the
810
substituted keys and values.
811
812
813
=cut
814
815
sub parse_letter {
816
    my $params = shift;
817
    foreach my $required (qw( letter_code borrowernumber )) {
818
        return unless ( exists $params->{$required} && $params->{$required} );
819
    }
820
821
    my $substitute = $params->{'substitute'} || {};
822
    $substitute->{today} ||= C4::Dates->new()->output("syspref");
823
824
    my %tables = ( 'borrowers' => $params->{'borrowernumber'} );
825
    if ( my $p = $params->{'branchcode'} ) {
826
        $tables{'branches'} = $p;
827
    }
828
829
    my $currencies = GetCurrency();
830
    my $currency_format;
831
    $currency_format = $currencies->{currency} if defined($currencies);
832
833
    my @item_tables;
834
    if ( my $i = $params->{'items'} ) {
835
        my $item_format = '';
836
        foreach my $item (@$i) {
837
            my $fine = GetFine($item->{'itemnumber'}, $params->{'borrowernumber'});
838
            if ( !$item_format and defined $params->{'letter'}->{'content'} ) {
839
                $params->{'letter'}->{'content'} =~ m/(<item>.*<\/item>)/;
840
                $item_format = $1;
841
            }
842
843
            $item->{'fine'} = currency_format($currency_format, "$fine", FMT_SYMBOL);
844
            # if active currency isn't correct ISO code fallback to sprintf
845
            $item->{'fine'} = sprintf('%.2f', $fine) unless $item->{'fine'};
846
847
            push @item_tables, {
848
                'biblio' => $item->{'biblionumber'},
849
                'biblioitems' => $item->{'biblionumber'},
850
                'items' => $item,
851
                'issues' => $item->{'itemnumber'},
852
            };
853
        }
854
    }
855
856
    return C4::Letters::GetPreparedLetter (
857
        module => 'circulation',
858
        letter_code => $params->{'letter_code'},
859
        branchcode => $params->{'branchcode'},
860
        tables => \%tables,
861
        substitute => $substitute,
862
        repeat => { item => \@item_tables },
863
        message_transport_type => $params->{message_transport_type},
864
    );
865
}
866
867
=head2 prepare_letter_for_printing
797
=head2 prepare_letter_for_printing
868
798
869
returns a string of text appropriate for printing in the event that an
799
returns a string of text appropriate for printing in the event that an
870
- 

Return to bug 12933