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

(-)a/C4/Installer/PerlDependencies.pm (+5 lines)
Lines 616-621 our $PERL_DEPS = { Link Here
616
        'usage'    => 'OpacSelfRegistration',
616
        'usage'    => 'OpacSelfRegistration',
617
        'required' => '1',
617
        'required' => '1',
618
        'min_ver'  => '0.22',
618
        'min_ver'  => '0.22',
619
      },
620
    'Net::Printer' => {
621
        'usage'    => 'Push to printer',
622
        'required' => '0',
623
        'min_ver'  => '1.11',
619
    },
624
    },
620
    'File::Temp' => {
625
    'File::Temp' => {
621
        'usage'    => 'Plugins',
626
        'usage'    => 'Plugins',
(-)a/installer/data/mysql/atomicupdate/bug_8352.sql (+8 lines)
Line 0 Link Here
1
ALTER TABLE reserves ADD printed BOOLEAN NULL AFTER suspend_until;
2
3
INSERT INTO  letter ( module, code,  branchcode, name, is_html, title, content ) VALUES (
4
    'reserves',  'HOLD_PLACED_PRINT',  '',  'Hold Placed ( Auto-Print )',  '0',  'Hold Placed ( Auto-Print )',  'Hold to pull at <<branches.branchname>>
5
6
For <<borrowers.firstname>> <<borrowers.surname>> ( <<borrowers.cardnumber>> )
7
8
<<biblio.title>> by <<biblio.author>>');
(-)a/installer/data/mysql/en/mandatory/sample_notices.sql (+3 lines)
Lines 156-158 Your library.' Link Here
156
INSERT INTO letter(module, code, branchcode, name, title, content, message_transport_type)
156
INSERT INTO letter(module, code, branchcode, name, title, content, message_transport_type)
157
VALUES ('acquisition', 'ACQ_NOTIF_ON_RECEIV', '', 'Notification on receiving', 'Order received', 'Dear <<borrowers.firstname>> <<borrowers.surname>>,\n\n The order <<aqorders.ordernumber>> (<<biblio.title>>) has been received.\n\nYour library.', 'email'),
157
VALUES ('acquisition', 'ACQ_NOTIF_ON_RECEIV', '', 'Notification on receiving', 'Order received', 'Dear <<borrowers.firstname>> <<borrowers.surname>>,\n\n The order <<aqorders.ordernumber>> (<<biblio.title>>) has been received.\n\nYour library.', 'email'),
158
('members','MEMBERSHIP_EXPIRY','','Account expiration','Account expiration','Dear <<borrowers.title>> <<borrowers.firstname>> <<borrowers.surname>>,.\r\n\r\nYour library card will expire soon, on:\r\n\r\n<<borrowers.dateexpiry>>\r\n\r\nThank you,\r\n\r\nLibrarian\r\n\r\n<<branches.branchname>>','email');
158
('members','MEMBERSHIP_EXPIRY','','Account expiration','Account expiration','Dear <<borrowers.title>> <<borrowers.firstname>> <<borrowers.surname>>,.\r\n\r\nYour library card will expire soon, on:\r\n\r\n<<borrowers.dateexpiry>>\r\n\r\nThank you,\r\n\r\nLibrarian\r\n\r\n<<branches.branchname>>','email');
159
160
INSERT INTO `letter` (`module`,`code`,`branchcode`,`name`,`is_html`,`title`,`content`)
161
VALUES ('reserves', 'HOLD_PLACED_PRINT', 'Hold Placed ( Auto-Print )', 'Hold Placed ( Auto-Print )', 'Hold to pull at <<branches.branchname>>\r\nFor <<borrowers.firstname>> <<borrowers.surname>> ( <<borrowers.cardnumber>> )\r\n<<biblio.title>> by <<biblio.author>>');
(-)a/installer/data/mysql/kohastructure.sql (+2 lines)
Lines 1663-1668 CREATE TABLE `old_reserves` ( -- this table holds all holds/reserves that have b Link Here
1663
  `lowestPriority` tinyint(1) NOT NULL, -- has this hold been pinned to the lowest priority in the holds queue (1 for yes, 0 for no)
1663
  `lowestPriority` tinyint(1) NOT NULL, -- has this hold been pinned to the lowest priority in the holds queue (1 for yes, 0 for no)
1664
  `suspend` BOOLEAN NOT NULL DEFAULT 0, -- in this hold suspended (1 for yes, 0 for no)
1664
  `suspend` BOOLEAN NOT NULL DEFAULT 0, -- in this hold suspended (1 for yes, 0 for no)
1665
  `suspend_until` DATETIME NULL DEFAULT NULL, -- the date this hold is suspended until (NULL for infinitely)
1665
  `suspend_until` DATETIME NULL DEFAULT NULL, -- the date this hold is suspended until (NULL for infinitely)
1666
  `printed` tinyint(1) DEFAULT NULL,
1666
  PRIMARY KEY (`reserve_id`),
1667
  PRIMARY KEY (`reserve_id`),
1667
  KEY `old_reserves_borrowernumber` (`borrowernumber`),
1668
  KEY `old_reserves_borrowernumber` (`borrowernumber`),
1668
  KEY `old_reserves_biblionumber` (`biblionumber`),
1669
  KEY `old_reserves_biblionumber` (`biblionumber`),
Lines 1838-1843 CREATE TABLE `reserves` ( -- information related to holds/reserves in Koha Link Here
1838
  `lowestPriority` tinyint(1) NOT NULL,
1839
  `lowestPriority` tinyint(1) NOT NULL,
1839
  `suspend` BOOLEAN NOT NULL DEFAULT 0,
1840
  `suspend` BOOLEAN NOT NULL DEFAULT 0,
1840
  `suspend_until` DATETIME NULL DEFAULT NULL,
1841
  `suspend_until` DATETIME NULL DEFAULT NULL,
1842
  `printed` tinyint(1) DEFAULT NULL,
1841
  PRIMARY KEY (`reserve_id`),
1843
  PRIMARY KEY (`reserve_id`),
1842
  KEY priorityfoundidx (priority,found),
1844
  KEY priorityfoundidx (priority,found),
1843
  KEY `borrowernumber` (`borrowernumber`),
1845
  KEY `borrowernumber` (`borrowernumber`),
(-)a/misc/cronjobs/holds/print_holds.pl (-1 / +159 lines)
Line 0 Link Here
0
- 
1
#!/usr/bin/perl
2
3
# Copyright 2009-2010 Kyle Hall
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 2 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
22
BEGIN {
23
24
    # find Koha's Perl modules
25
    # test carefully before changing this
26
    use FindBin;
27
    eval { require "$FindBin::Bin/../kohalib.pl" };
28
}
29
30
use Getopt::Long;
31
use Pod::Usage;
32
use Net::Printer;
33
34
use C4::Context;
35
use C4::Members qw(GetMember);
36
use C4::Letters qw(GetPreparedLetter);
37
38
my $help    = 0;
39
my $test    = 0;
40
my $verbose = 0;
41
my @printers;
42
GetOptions(
43
    "help|?"      => \$help,
44
    "verbose|v"   => \$verbose,
45
    "test|t"      => \$test,
46
    "printer|p=s" => \@printers,
47
);
48
pod2usage(1) if $help;
49
pod2usage(1) unless @printers;
50
51
my %printers;
52
foreach my $p (@printers) {
53
    my ( $branchcode, $printer, $server, $port ) = split( /,/, $p );
54
    my %options;
55
    $options{'printer'} = $printer if ($printer);
56
    $options{'server'}  = $server  if ($server);
57
    $options{'port'}    = $port    if ($port);
58
    $printers{$branchcode} = new Net::Printer(%options);
59
}
60
61
my $dbh   = C4::Context->dbh;
62
my $query = "SELECT * FROM reserves WHERE printed IS NULL";
63
my $sth   = $dbh->prepare($query);
64
$sth->execute();
65
66
my $set_printed_query = "
67
    UPDATE reserves
68
    SET printed = 1
69
    WHERE reserve_id = ?
70
";
71
my $set_printed_sth = $dbh->prepare($set_printed_query);
72
73
while ( my $hold = $sth->fetchrow_hashref() ) {
74
    if ($verbose) {
75
        print "\nFound Notice to Print\n";
76
        print "Borrowernumber: " . $hold->{'borrowernumber'} . "\n";
77
        print "Biblionumber: " . $hold->{'biblionumber'} . "\n";
78
        print "Branch: " . $hold->{'branchcode'} . "\n";
79
    }
80
81
    my $borrower =
82
      C4::Members::GetMember( 'borrowernumber' => $hold->{'borrowernumber'} );
83
84
    my $letter = GetPreparedLetter(
85
        module      => 'reserves',
86
        letter_code => 'HOLD_PLACED_PRINT',
87
        branchcode  => $hold->{branchcode},
88
        tables      => {
89
            'branches'    => $hold->{'branchcode'},
90
            'biblio'      => $hold->{'biblionumber'},
91
            'biblioitems' => $hold->{'biblionumber'},
92
            'items'       => $hold->{'itemnumber'},
93
            'borrowers'   => $borrower,
94
        }
95
    );
96
97
    if ( defined( $printers{ $hold->{branchcode} } ) ) {
98
        unless ($test) {
99
            my $result =
100
              $printers{ $hold->{'branchcode'} }
101
              ->printstring( $letter->{'content'} );
102
            my $error = $printers{ $hold->{'branchcode'} }->printerror();
103
104
            unless ($error) {
105
                $set_printed_sth->execute( $hold->{'reserve_id'} );
106
            }
107
            else {
108
                warn "ERROR: $error";
109
            }
110
        }
111
        else {
112
            print "TEST MODE, notice will not be printed\n";
113
            print $letter->{'content'} . "\n";
114
        }
115
    }
116
    else {
117
        print "WARNING: No printer defined for branchcode "
118
          . $hold->{'branchcode'}
119
          if ($verbose);
120
    }
121
122
}
123
124
__END__
125
126
=head1 NAME
127
128
Print Holds
129
130
=head1 SYNOPSIS
131
132
print_holds.pl --printer <branchcode>,<printer>,<server>,<port>
133
134
=head1 OPTIONS
135
136
=over 8
137
138
=item B<-help>
139
140
Print a brief help message and exits.
141
142
=item B<-printer>
143
144
Adds a printer, the value is the branchcode, printer name, server name and server port separated by commas.
145
146
e.g. print_holds.pl --printer MPL,lp,printserver,515 --printer CPL,lp2,printserver,516
147
148
would add printers for branchcodes MPL and CPL. If a printer is not defined for a given branch, notices for
149
that branch will not be printed.
150
151
=head1 DESCRIPTION
152
153
B<This program> will print on-demand notices for items in the holds queue as they appear.
154
155
=head1 AUTHOR
156
157
Kyle M Hall <kyle@bywatersolutions.com>
158
159
=cut

Return to bug 8352