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

(-)a/C4/Installer/PerlDependencies.pm (+5 lines)
Lines 656-661 our $PERL_DEPS = { Link Here
656
        'usage'    => 'OpacSelfRegistration',
656
        'usage'    => 'OpacSelfRegistration',
657
        'required' => '1',
657
        'required' => '1',
658
        'min_ver'  => '0.22',
658
        'min_ver'  => '0.22',
659
      },
660
    'Net::Printer' => {
661
        'usage'    => 'Push to printer',
662
        'required' => '0',
663
        'min_ver'  => '1.11',
659
    },
664
    },
660
    'File::Temp' => {
665
    'File::Temp' => {
661
        'usage'    => 'Plugins',
666
        '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 (+4 lines)
Lines 166-168 VALUES ( 'circulation', 'OVERDUES_SLIP', '', 'Overdues Slip', '0', 'OVERDUES_SLI Link Here
166
INSERT INTO `letter` (module, code, branchcode, name, is_html, title, content, message_transport_type)
166
INSERT INTO `letter` (module, code, branchcode, name, is_html, title, content, message_transport_type)
167
VALUES ('members','PASSWORD_RESET','','Online password reset',1,'Koha password recovery','<html>\r\n<p>This email has been sent in response to your password recovery request for the account <strong><<user>></strong>.\r\n</p>\r\n<p>\r\nYou can now create your new password using the following link:\r\n<br/><a href=\"<<passwordreseturl>>\"><<passwordreseturl>></a>\r\n</p>\r\n<p>This link will be valid for 2 days from this email\'s reception, then you must reapply if you do not change your password.</p>\r\n<p>Thank you.</p>\r\n</html>\r\n','email'
167
VALUES ('members','PASSWORD_RESET','','Online password reset',1,'Koha password recovery','<html>\r\n<p>This email has been sent in response to your password recovery request for the account <strong><<user>></strong>.\r\n</p>\r\n<p>\r\nYou can now create your new password using the following link:\r\n<br/><a href=\"<<passwordreseturl>>\"><<passwordreseturl>></a>\r\n</p>\r\n<p>This link will be valid for 2 days from this email\'s reception, then you must reapply if you do not change your password.</p>\r\n<p>Thank you.</p>\r\n</html>\r\n','email'
168
);
168
);
169
170
INSERT INTO `letter` (`module`,`code`,`branchcode`,`name`,`is_html`,`title`,`content`)
171
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>>');
172
(-)a/installer/data/mysql/kohastructure.sql (+2 lines)
Lines 1695-1700 CREATE TABLE `old_reserves` ( -- this table holds all holds/reserves that have b Link Here
1695
  `lowestPriority` tinyint(1) NOT NULL, -- has this hold been pinned to the lowest priority in the holds queue (1 for yes, 0 for no)
1695
  `lowestPriority` tinyint(1) NOT NULL, -- has this hold been pinned to the lowest priority in the holds queue (1 for yes, 0 for no)
1696
  `suspend` BOOLEAN NOT NULL DEFAULT 0, -- in this hold suspended (1 for yes, 0 for no)
1696
  `suspend` BOOLEAN NOT NULL DEFAULT 0, -- in this hold suspended (1 for yes, 0 for no)
1697
  `suspend_until` DATETIME NULL DEFAULT NULL, -- the date this hold is suspended until (NULL for infinitely)
1697
  `suspend_until` DATETIME NULL DEFAULT NULL, -- the date this hold is suspended until (NULL for infinitely)
1698
  `printed` tinyint(1) DEFAULT NULL,
1698
  PRIMARY KEY (`reserve_id`),
1699
  PRIMARY KEY (`reserve_id`),
1699
  KEY `old_reserves_borrowernumber` (`borrowernumber`),
1700
  KEY `old_reserves_borrowernumber` (`borrowernumber`),
1700
  KEY `old_reserves_biblionumber` (`biblionumber`),
1701
  KEY `old_reserves_biblionumber` (`biblionumber`),
Lines 1872-1877 CREATE TABLE `reserves` ( -- information related to holds/reserves in Koha Link Here
1872
  `lowestPriority` tinyint(1) NOT NULL,
1873
  `lowestPriority` tinyint(1) NOT NULL,
1873
  `suspend` BOOLEAN NOT NULL DEFAULT 0,
1874
  `suspend` BOOLEAN NOT NULL DEFAULT 0,
1874
  `suspend_until` DATETIME NULL DEFAULT NULL,
1875
  `suspend_until` DATETIME NULL DEFAULT NULL,
1876
  `printed` tinyint(1) DEFAULT NULL,
1875
  PRIMARY KEY (`reserve_id`),
1877
  PRIMARY KEY (`reserve_id`),
1876
  KEY priorityfoundidx (priority,found),
1878
  KEY priorityfoundidx (priority,found),
1877
  KEY `borrowernumber` (`borrowernumber`),
1879
  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