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

(-)a/C4/Auth.pm (+1 lines)
Lines 328-333 sub get_template_and_user { Link Here
328
    );
328
    );
329
    if ( $in->{'type'} eq "intranet" ) {
329
    if ( $in->{'type'} eq "intranet" ) {
330
        $template->param(
330
        $template->param(
331
            useHouseboundModule         => C4::Context->preference("useHouseboundModule"),
331
            AmazonCoverImages           => C4::Context->preference("AmazonCoverImages"),
332
            AmazonCoverImages           => C4::Context->preference("AmazonCoverImages"),
332
            AutoLocation                => C4::Context->preference("AutoLocation"),
333
            AutoLocation                => C4::Context->preference("AutoLocation"),
333
            "BiblioDefaultView".C4::Context->preference("IntranetBiblioDefaultView") => 1,
334
            "BiblioDefaultView".C4::Context->preference("IntranetBiblioDefaultView") => 1,
(-)a/C4/Circulation.pm (+12 lines)
Lines 58-63 use Date::Calc qw( Link Here
58
  Day_of_Week
58
  Day_of_Week
59
  Add_Delta_Days
59
  Add_Delta_Days
60
);
60
);
61
use C4::Housebound qw( CheckPrevIssue );
62
61
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
63
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
62
64
63
BEGIN {
65
BEGIN {
Lines 841-846 sub CanBookBeIssued { Link Here
841
        }
843
        }
842
    }
844
    }
843
845
846
    # If Housebound patron and useHouseboundCheckPrev syspref is ON
847
    # check for previous issue of item to patron.
848
    if ( C4::Context->preference('useHouseboundCheckPrevious') == 1
849
         && $borrower->{categorycode} eq 'HB' )
850
    {
851
        $needsconfirmation{HOUSEBOUNDPREVISSUE} = 1
852
          if CheckPrevIssue( $borrower->{borrowernumber},
853
                             $item->{biblionumber} );
854
    }
855
844
    #
856
    #
845
    # ITEM CHECKING
857
    # ITEM CHECKING
846
    #
858
    #
(-)a/C4/Housebound.pm (+377 lines)
Line 0 Link Here
1
package C4::Housebound;
2
3
# Copyright 2011 Mark Gavillet
4
# Copyright 2014 PTFS-Europe Ltd
5
#
6
# This file is part of Koha.
7
#
8
# Koha is free software; you can redistribute it and/or modify it under the
9
# terms of the GNU General Public License as published by the Free Software
10
# Foundation; either version 3 of the License, or (at your option) any later
11
# version.
12
#
13
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
14
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
16
#
17
# You should have received a copy of the GNU General Public License along
18
# with Koha; if not, write to the Free Software Foundation, Inc.,
19
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
21
use strict;
22
use warnings;
23
use C4::Context;
24
use base qw(Exporter);
25
26
our $VERSION = 3.02;
27
our @EXPORT_OK  = qw(
28
  GetHouseboundDetails
29
  CreateHouseboundDetails
30
  UpdateHouseboundDetails
31
  GetCurrentHouseboundInstanceList
32
  GetHouseboundInstanceDetails
33
  UpdateHouseboundInstanceDetails
34
  CreateHouseboundInstanceDetails
35
  DeleteHouseboundInstanceDetails
36
  GetVolunteerNameAndID
37
  GetVolunteerList
38
  GetChooserList
39
  GetDelivererList
40
  CheckPrevIssue
41
);
42
43
=head1 NAME
44
45
C4::Housebound - Koha housebound patrons module.
46
47
=head1 SYNOPSIS
48
49
use C4::Housebound;
50
51
=head1 DESCRIPTION
52
53
This module contains routines for adding, modifying and deleting
54
housebound details for patrons, and instances of item delivery by
55
volunteers.
56
57
=head1 FUNCTIONS
58
59
=head2 GetHouseboundDetails
60
61
  $housebound = GetHouseboundDetails( $borrowernumber );
62
63
Return a hashref containing the housebound table's row associated with
64
$BORROWERNUMBER or undef.
65
66
=cut
67
68
sub GetHouseboundDetails {
69
    my ($borrowernumber) = @_;
70
    if ($borrowernumber) {
71
        my $dbh = C4::Context->dbh;
72
        return $dbh->selectrow_hashref(
73
            'select * from housebound where borrowernumber=?',
74
            {}, $borrowernumber );
75
    }
76
    return;
77
}
78
79
=head2 CreateHouseboundDetails
80
81
  CreateHouseboundDetails( $borrowernumber, $day, $frequency,
82
                           $Itype_quant, $Item_subject, $Item_authors,
83
                           $referral, $notes );
84
85
Create a new entry in the housebound table containing our arguments.
86
The return value is undef.
87
88
=cut
89
90
sub CreateHouseboundDetails {
91
    my ( $borrowernumber, $day, $frequency, $Itype_quant, $Item_subject,
92
        $Item_authors, $referral, $notes )
93
      = @_;
94
    if ($borrowernumber) {
95
        my $dbh = C4::Context->dbh;
96
        my $sth = $dbh->prepare(
97
'insert into housebound (day, frequency, borrowernumber, Itype_quant, Item_subject, Item_authors, referral, notes) values (?,?,?,?,?,?,?,?)'
98
        );
99
        $sth->execute( $day, $frequency, $borrowernumber, $Itype_quant,
100
            $Item_subject, $Item_authors, $referral, $notes );
101
    }
102
    return;
103
}
104
105
=head2 UpdateHouseboundDetails
106
107
  UpdateHouseboundDetails( $hbnumber, $borrowernumber, $day,
108
                           $frequency, $Itype_quant, $Item_subject,
109
                           $Item_authors, $referral, $notes );
110
111
Update housebound table's row matching $hbnumber with our arguments.
112
The return value is undef.
113
114
=cut
115
116
sub UpdateHouseboundDetails {
117
    my (
118
        $hbnumber,     $borrowernumber, $day,
119
        $frequency,    $Itype_quant,    $Item_subject,
120
        $Item_authors, $referral,       $notes
121
    ) = @_;
122
    if ($hbnumber) {
123
        my $dbh = C4::Context->dbh;
124
        my $sth = $dbh->prepare(
125
'update housebound set day=?,frequency=?,borrowernumber=?,Itype_quant=?,Item_subject=?,Item_authors=?,referral=?,notes=? where hbnumber=?'
126
        );
127
        $sth->execute(
128
            $day,         $frequency,    $borrowernumber,
129
            $Itype_quant, $Item_subject, $Item_authors,
130
            $referral,    $notes,        $hbnumber
131
        );
132
    }
133
    return;
134
}
135
136
=head2 GetCurrentHouseboundInstanceList
137
138
  $hb_instances = GetCurrentHouseboundInstanceList( $borrowernumber );
139
140
Return an arrayref containing all Housebound_Instances associated with
141
$BORROWERNUMBER, or undef.
142
143
=cut
144
145
sub GetCurrentHouseboundInstanceList {
146
    my ($borrowernumber) = @_;
147
    if ($borrowernumber) {
148
        my $dbh = C4::Context->dbh;
149
        my $sql =<<'END_SQL';
150
SELECT housebound_instance . * , concat( volunteer.firstname, ' ', volunteer.surname ) AS vol,
151
 concat(chooser.firstname, ' ', chooser.surname) as cho,
152
 concat(deliverer.firstname, ' ', deliverer.surname) as del
153
 FROM housebound_instance
154
 left JOIN borrowers volunteer ON volunteer.borrowernumber = housebound_instance.volunteer
155
 left join borrowers chooser on chooser.borrowernumber = housebound_instance.chooser
156
 left join borrowers deliverer on deliverer.borrowernumber = housebound_instance.deliverer
157
 where housebound_instance.borrowernumber=?
158
 order by housebound_instance.dmy desc
159
END_SQL
160
          return $dbh->selectall_arrayref( $sql, { Slice => {} },
161
            $borrowernumber );
162
    }
163
    return;
164
}
165
166
=head2 GetVolunteerNameAndID
167
168
  $volunteer = GetVolunteerNameAndID( $borrowernumber );
169
170
Return a hashref containing details of the volunteer identified by
171
$BORROWERNUMBER, or undef.
172
173
=cut
174
175
sub GetVolunteerNameAndID {
176
    my ($borrowernumber) = @_;
177
    if ($borrowernumber) {
178
        my $dbh = C4::Context->dbh;
179
        return $dbh->selectrow_hashref(
180
'select borrowernumber,title,firstname,surname from borrowers where borrowernumber=?',
181
            {}, $borrowernumber
182
        );
183
    }
184
    return;
185
}
186
187
=head2 GetVolunteerList
188
189
  $volunteers = GetVolunteerList();
190
191
Return an arrayref containing borrowernumbers and names of all known
192
volunteers, or undef.
193
194
=cut
195
196
sub GetVolunteerList {
197
    return GetHouseboundList("VOL");
198
}
199
200
=head2 GetDelivererList
201
202
  $deliverers = GetDelivererList();
203
204
Return an arrayref containing borrowernumbers and names of all known
205
deliverers, or undef.
206
207
=cut
208
209
sub GetDelivererList {
210
    return GetHouseboundList("DELIV");
211
}
212
213
=head2 GetChooserList
214
215
  $choosers = GetChooserList();
216
217
Return an arrayref containing borrowernumbers and names of all known
218
choosers, or undef.
219
220
=cut
221
222
sub GetChooserList {
223
    return GetHouseboundList("CHO");
224
}
225
226
=head2 GetHouseboundList
227
228
  $patrons = GetHouseboundList( $brw_cat_code );
229
230
Return an arrayref containing borrowernumbers and names of all
231
borrowers with $BRW_CAT_CODE, or undef.
232
233
=cut
234
235
sub GetHouseboundList {
236
    my ( $cat_code ) = @_;
237
    my $dbh = C4::Context->dbh;
238
    my $sql = "SELECT borrowernumber as volbornumber,
239
 concat(title, ' ', firstname, ' ', surname) as fullname
240
 from borrowers where categorycode=?
241
 order by surname, firstname asc";
242
      return $dbh->selectall_arrayref( $sql, { Slice => {} }, $cat_code );
243
}
244
245
=head2 GetHouseboundInstanceDetails
246
247
  $housebound = GetHouseboundInstanceDetails( $instance_id );
248
249
Return a hashref containing all details of the housebound_instance
250
associated with $INSTANCE_ID or undef.
251
252
=cut
253
254
sub GetHouseboundInstanceDetails {
255
    my ($instanceid) = @_;
256
    if ($instanceid) {
257
        my $dbh = C4::Context->dbh;
258
        return $dbh->selectrow_hashref(
259
            'SELECT * from housebound_instance where instanceid=?',
260
            {}, $instanceid );
261
    }
262
    return;
263
}
264
265
=head2 UpdateHouseboundInstanceDetails
266
267
  UpdateHouseboundInstanceDetails( $instanceid, $hbnumber, $dmy,
268
                                   $time, $borrowernumber, $volunteer,
269
                                   $chooser, $deliverer );
270
271
Update housebound_instance table's row matching $instanceid with our
272
arguments. The return value is undef.
273
274
=cut
275
276
sub UpdateHouseboundInstanceDetails {
277
    my ( $instanceid, $hbnumber, $dmy, $time, $borrowernumber, $volunteer,
278
        $chooser, $deliverer )
279
      = @_;
280
    if ($hbnumber) {
281
        my $dbh = C4::Context->dbh;
282
        my $sth = $dbh->prepare(
283
'update housebound_instance set hbnumber=?, dmy=?, time=?, borrowernumber=?, volunteer=?, chooser=?, deliverer=? where instanceid=?'
284
        );
285
        $sth->execute( $hbnumber, $dmy, $time, $borrowernumber, $volunteer,
286
            $chooser, $deliverer, $instanceid );
287
    }
288
    return;
289
}
290
291
=head2 CreateHouseboundInstanceDetails
292
293
  CreateHouseboundInstanceDetails( $hbnumber, $dmy, $time,
294
                                   $borrowernumber, $volunteer,
295
                                   $chooser, $deliverer );
296
297
Create a new housebound_instance table row containing our
298
arguments. The return value is undef.
299
300
=cut
301
302
sub CreateHouseboundInstanceDetails {
303
    my ( $hbnumber, $dmy, $time, $borrowernumber, $volunteer, $chooser,
304
        $deliverer )
305
      = @_;
306
    if ($borrowernumber) {
307
        my $dbh = C4::Context->dbh;
308
        my $sth = $dbh->prepare(
309
'insert into housebound_instance (hbnumber, dmy, time, borrowernumber, volunteer, chooser, deliverer) values (?,?,?,?,?,?,?)'
310
        );
311
        $sth->execute( $hbnumber, $dmy, $time, $borrowernumber, $volunteer,
312
            $chooser, $deliverer );
313
    }
314
    return;
315
}
316
317
=head2 DeleteHouseboundInstanceDetails
318
319
  DeleteHouseboundInstanceDetails( $instanceid );
320
321
Delete the row from housebound_instance identified by
322
$INSTANCEID. The return value is undef.
323
324
=cut
325
326
sub DeleteHouseboundInstanceDetails {
327
    my ($instanceid) = @_;
328
    if ($instanceid) {
329
        my $dbh = C4::Context->dbh;
330
        my $sth =
331
          $dbh->prepare('delete from housebound_instance where instanceid=?');
332
        $sth->execute($instanceid);
333
    }
334
    return;
335
}
336
337
=head2 CheckPrevIssue
338
339
  CheckPrevIssue( $borrowernumber, $biblionumber );
340
341
Return 1 if $BIBLIONUMBER has previously been issued to
342
$BORROWERNUMBER, 0 otherwise.
343
344
=cut
345
346
sub CheckPrevIssue {
347
    my ( $borrowernumber, $biblionumber ) = @_;
348
    my $dbh       = C4::Context->dbh;
349
    my $previssue = 0;
350
    my $sth =
351
      $dbh->prepare('select itemnumber from items where biblionumber=?');
352
    $sth->execute($biblionumber);
353
354
    my $query = $dbh->prepare(
355
'select count(itemnumber) from old_issues where borrowernumber=? and itemnumber=?'
356
    );
357
    while ( my @row = $sth->fetchrow_array() ) {
358
        $query->execute( $borrowernumber, $row[0] );
359
        while ( my @matches = $query->fetchrow_array() ) {
360
            if ( $matches[0] > 0 ) {
361
                $previssue = 1;
362
            }
363
        }
364
    }
365
    return $previssue;
366
}
367
368
1;
369
370
__END__
371
372
=head1 AUTHOR
373
374
Mark Gavillet
375
Alex Sassmannshausen
376
377
=cut
(-)a/installer/data/mysql/atomicupdate/housebound_tables.sql (+41 lines)
Line 0 Link Here
1
CREATE TABLE IF NOT EXISTS `housebound` (
2
  `hbnumber` int(11) NOT NULL auto_increment,
3
  `day` text NOT NULL,
4
  `frequency` text,
5
  `borrowernumber` int(11) default NULL,
6
  `Itype_quant` varchar(10) default NULL,
7
  `Item_subject` text,
8
  `Item_authors` text,
9
  `referral` text,
10
  `notes` text,
11
  PRIMARY KEY  (`hbnumber`),
12
  KEY `borrowernumber` (`borrowernumber`)
13
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;
14
15
16
17
CREATE TABLE IF NOT EXISTS `housebound_instance` (
18
  `instanceid` int(11) NOT NULL auto_increment,
19
  `hbnumber` int(11) NOT NULL,
20
  `dmy` date default NULL,
21
  `time` text,
22
  `borrowernumber` int(11) NOT NULL,
23
  `volunteer` int(11) default NULL,
24
  `chooser` int(11) default NULL,
25
  `deliverer` int(11) default NULL,
26
  PRIMARY KEY  (`instanceid`),
27
  KEY `hbnumber` (`hbnumber`,`borrowernumber`,`volunteer`,`chooser`,`deliverer`)
28
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;
29
30
insert into systempreferences (variable,value,options,explanation,type) values
31
('useHouseboundModule',1,'','If ON, use the Housebound module','YesNo');
32
33
insert into systempreferences (variable,value,options,explanation,type) values
34
('useHouseboundCheckPrevious',1,'','If ON, checks if Housebound patrons have previous issued items to be checked out',
35
'YesNo');
36
37
insert into categories (categorycode, description, enrolmentperiod, upperagelimit, dateofbirthrequired, category_type)
38
values ('VOL','Housebound volunteer','99','999','1','A'),('HB','Housebound patron','99','999','1','A'),('DELIV','Housebound deliverer','99','999','1','A'),('CHO','Housebound chooser','99','999','1','A');
39
40
insert into authorised_values (category, authorised_value, lib)
41
values ('Day','Example_Day','Change Me In Authorised Values (Day)'), ('Frequency','Example_Freq','Change Me In Authorised Values (Frequency)');
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/circ-menu.inc (+3 lines)
Lines 76-81 Link Here
76
    [% IF ( CAN_user_parameters ) %]
76
    [% IF ( CAN_user_parameters ) %]
77
        [% IF ( logview ) %]<li class="active">[% ELSE %]<li>[% END %]<a href="/cgi-bin/koha/tools/viewlog.pl?do_it=1&amp;modules=MEMBERS&amp;modules=circulation&amp;object=[% borrowernumber %]&amp;src=circ">Modification log</a></li>
77
        [% IF ( logview ) %]<li class="active">[% ELSE %]<li>[% END %]<a href="/cgi-bin/koha/tools/viewlog.pl?do_it=1&amp;modules=MEMBERS&amp;modules=circulation&amp;object=[% borrowernumber %]&amp;src=circ">Modification log</a></li>
78
    [% END %]
78
    [% END %]
79
    [% IF useHouseboundModule %]
80
        [% IF houseboundview %]<li class="active">[% ELSE %]<li>[% END %]<a href="/cgi-bin/koha/members/housebound.pl?borrowernumber=[% borrowernumber %]">Housebound</a></li>
81
    [% END %]
79
    [% IF ( EnhancedMessagingPreferences ) %]
82
    [% IF ( EnhancedMessagingPreferences ) %]
80
	[% IF ( sentnotices ) %]<li class="active">[% ELSE %]<li>[% END %]<a href="/cgi-bin/koha/members/notices.pl?borrowernumber=[% borrowernumber %]">Notices</a></li>
83
	[% IF ( sentnotices ) %]<li class="active">[% ELSE %]<li>[% END %]<a href="/cgi-bin/koha/members/notices.pl?borrowernumber=[% borrowernumber %]">Notices</a></li>
81
    [% END %]
84
    [% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt (+4 lines)
Lines 271-276 var MSG_EXPORT_SELECT_CHECKOUTS = _("You must select checkout(s) to export"); Link Here
271
[% IF  HIGHHOLDS %]
271
[% IF  HIGHHOLDS %]
272
    <li>High demand item. Loan period shortened to [% HIGHHOLDS.duration %] days (due [% HIGHHOLDS.returndate %]). Check out anyway?</li>
272
    <li>High demand item. Loan period shortened to [% HIGHHOLDS.duration %] days (due [% HIGHHOLDS.returndate %]). Check out anyway?</li>
273
[% END %]
273
[% END %]
274
275
[% IF HOUSEBOUNDPREVISSUE %]
276
    <li>Housebound patron has previously issued this item.  Check out anyway?</li>
277
[% END %]
274
</ul>
278
</ul>
275
279
276
[% IF HIGHHOLDS %]
280
[% IF HIGHHOLDS %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/housebound.tt (+69 lines)
Line 0 Link Here
1
[% USE AuthorisedValues %]
2
[% INCLUDE 'doc-head-open.inc' %]
3
<title>Koha Housebound - [% surname %], [% firstname %]</title>
4
[% INCLUDE 'doc-head-close.inc' %]
5
6
</head>
7
<body>
8
[% INCLUDE 'header.inc' %]
9
[% INCLUDE 'patron-search.inc' %]
10
11
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/members/members-home.pl">Patrons</a>  &rsaquo; Housebound details for [% firstname %] [% surname %] [% IF ( cardnumber ) %]([% cardnumber %])[% END %]</div>
12
13
<div id="doc3" class="yui-t2">
14
    <div id="bd">
15
        <div id="yui-main">
16
            <div class="yui-b"
17
                <h1>Housebound details for [% title %] [% firstname %] [% surname %] [% IF ( cardnumber ) %]([% cardnumber %])[% END %]</h1>
18
                [% IF ( housebound.hbnumber ) %]
19
                    <div><ul class="toolbar"><li><span class="yui-button yui-link-button"><span class="first-child"><a href="/cgi-bin/koha/members/houseboundedit.pl?hbnumber=[% housebound.hbnumber %]&borrowernumber=[% borrowernumber %]&op=edit">Edit</a></span></span></li></ul></div>
20
                    <div id="houseboundinfo" class="rows">
21
                        <ol>
22
                            <li>
23
                                <span class="label">Delivery day:</span>
24
                                [% AuthorisedValues.GetByCode( 'day', housebound.day, 0 )
25
                                   || housebound.day %]
26
                            </li>
27
                            <li>
28
                                <span class="label">Frequency:</span>
29
                                [% AuthorisedValues.GetByCode( 'frequency', housebound.frequency, 0 )
30
                                   || housebound.frequency %]
31
                            </li>
32
                            <li><span class="label">Material:</span>[% housebound.Itype_quant %]</li>
33
                            <li><span class="label">Subjects:</span>[% housebound.Item_subject %]</li>
34
                            <li><span class="label">Authors:</span>[% housebound.Item_authors %]</li>
35
                            <li><span class="label">Referral:</span>[% housebound.referral %]</li>
36
                            <li><span class="label">Notes:</span>[% housebound.notes %]</li>
37
                        </ol>
38
                        <br/>
39
                        <div style="height:10px;clear:both;"></div>
40
                        <h1>Deliveries</h1>
41
                        <div><ul class="toolbar"><li><span class="yui-button yui-link-button"><span class="first-child"><a href="/cgi-bin/koha/members/houseboundinstances.pl?op=add&hbnumber=[% housebound.hbnumber %]&borrowernumber=[% borrowernumber %]">Add a new delivery</a></span></span></li></ul></div>
42
                        <table border="0" width="100%" cellpadding="3" cellspacing="0">
43
                            <tr>
44
                                <th>ID</th><th>Date</th><th>Volunteer</th><th>Chooser</th>
45
                                <th>Deliverer</th><th>Actions</th>
46
                            </tr>
47
                            [% FOREACH instance IN instanceloop %]
48
                                <tr>
49
                                    <td>[% instance.instanceid %]</td>
50
                                    <td>[% instance.dmy %] ([% instance.time %])</td>
51
                                    <td><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% instance.volunteer %]">[% instance.vol %]</a></td>
52
                                    <td><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% instance.chooser %]">[% instance.cho %]</a></td>
53
                                    <td><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% instance.deliverer %]">[% instance.del %]</a></td>
54
                                    <td align="center"><a href="/cgi-bin/koha/members/houseboundinstances.pl?op=edit&instanceid=[% instance.instanceid %]&borrowernumber=[% instance.borrowernumber %]&hbnumber=[% instance.hbnumber %]">Edit</a> | <a href="/cgi-bin/koha/members/houseboundinstances.pl?op=del&instanceid=[% instance.instanceid %]&borrowernumber=[% instance.borrowernumber %]&hbnumber=[% instance.hbnumber %]">Delete</a></td>
55
                                </tr>
56
                            [% END %]
57
                        </table>
58
                    </div>
59
                [% ELSE %]
60
                    <p>This patron does not currently have registered housebound details. To add these details <a href="/cgi-bin/koha/members/houseboundedit.pl?hnbnumber=[% housebound.hbnumber %]&borrowernumber=[% borrowernumber %]&op=add">click here</a>.</p>
61
                [% END %]
62
            </div>
63
        </div>
64
        <div class="yui-b">
65
            [% INCLUDE 'circ-menu.inc' %]
66
        </div>
67
    </div>
68
</div>
69
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/houseboundedit.tt (+102 lines)
Line 0 Link Here
1
[% INCLUDE 'doc-head-open.inc' %]
2
<title>Koha Housebound - [% surname %], [% firstname %]</title>
3
[% INCLUDE 'doc-head-close.inc' %]
4
<script type="text/javascript" language="javascript">
5
//<![CDATA[
6
    $(document).ready(function() {
7
        $("#editform").validate()
8
    });
9
</script>
10
</head>
11
<body>
12
    [% INCLUDE 'header.inc' %]
13
    [% INCLUDE 'patron-search.inc' %]
14
15
    <div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/members/members-home.pl">Patrons</a>  &rsaquo; Edit housebound details for [% firstname %] [% surname %] [% IF ( cardnumber ) %]([% cardnumber %])[% END %]</div>
16
17
    <div id="doc3" class="yui-t2">
18
        <div id="bd">
19
            <div id="yui-main">
20
                <div class="yui-b">
21
                    <h1>Edit housebound details for [% title %] [% firstname %] [% surname %] [% IF ( cardnumber ) %]([% cardnumber %])[% END %]</h1>
22
23
                    <form id="editform" method="post" action="/cgi-bin/koha/members/houseboundedit.pl" name="form">
24
                        <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
25
                        <input type="hidden" name="hbnumber" value="[% housebound.hbnumber %]" />
26
                        <input type="hidden" name="op" value="[% opeditsubmit %][% opaddsubmit %]" />
27
                        <fieldset id="houseboundentry" class="rows">
28
                            <legend>Housebound details</legend>
29
                            <ol>
30
                                <li>
31
                                    <label for="day">Delivery day:</label>
32
                                    <select id="day" name="day" required>
33
                                        <option value="">Select a day</option>
34
                                        [% FOREACH d IN days %]
35
                                            [% IF ( housebound.day == d.authorised_value ) %]
36
                                                <option value="[% d.authorised_value %]" selected="selected">
37
                                            [% ELSE %]
38
                                                <option value="[% d.authorised_value %]">
39
                                            [% END %]
40
                                                [% IF ( d.lib ) %]
41
                                                    [% d.lib %]
42
                                                [% ELSE %]
43
                                                    [% d.authorised_value %]
44
                                                [% END %]
45
                                             </option>
46
                                        [% END %]
47
                                    </select>
48
                                </li>
49
                                <li>
50
                                    <label for="frequency">Frequency:</label>
51
                                    <select id="frequency" name="frequency" required>
52
                                        <option value="">Select a frequency</option>
53
                                        [% FOREACH f IN frequencies %]
54
                                            [% IF ( housebound.frequency == f.authorised_value ) %]
55
                                                <option value="[% f.authorised_value %]" selected="selected">
56
                                            [% ELSE %]
57
                                                <option value="[% f.authorised_value %]">
58
                                            [% END %]
59
                                                [% IF ( f.lib ) %]
60
                                                    [% f.lib %]
61
                                                [% ELSE %]
62
                                                    [% f.authorised_value %]
63
                                                [% END %]
64
                                             </option>
65
                                        [% END %]
66
                                    </select>
67
                                </li>
68
                                <li>
69
                                    <label for="Itype_quant">Material:</label>
70
                                    <input id="Itype_quant" type="text" value="[% housebound.Itype_quant %]" size="50" name="Itype_quant">
71
                                </li>
72
                                <li>
73
                                    <label for="Item_subject">Subjects:</label>
74
                                    <input id="Item_subject" type="text" value="[% housebound.Item_subject %]" size="50" name="Item_subject">
75
                                </li>
76
                                <li>
77
                                    <label for="Item_authors">Authors:</label>
78
                                    <input id="Item_authors" type="text" value="[% housebound.Item_authors %]" size="50" name="Item_authors">
79
                                </li>
80
                                <li>
81
                                    <label for="referral">Referral:</label>
82
                                    <input id="referral" type="text" value="[% housebound.referral %]" size="50" name="referral">
83
                                </li>
84
                                <li>
85
                                    <label for="notes">Notes:</label>
86
                                    <input id="notes" type="text" value="[% housebound.notes %]" size="50" name="notes">
87
                                </li>
88
                            </ol>
89
                        </fieldset>
90
                        <fieldset class="action">
91
                            <input type="submit" value="Save changes" onclick="return check_form_housebound();" name="save">
92
                            <a class="cancel" href="/cgi-bin/koha/members/housebound.pl?borrowernumber=[% borrowernumber %]">Cancel</a>
93
                        </fieldset>
94
                    </form>
95
                </div>
96
            </div>
97
            <div class="yui-b">
98
                [% INCLUDE 'circ-menu.inc' %]
99
            </div>
100
        </div>
101
    </div>
102
    [% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/houseboundinstances.tt (+133 lines)
Line 0 Link Here
1
[% USE KohaDates %]
2
[% INCLUDE 'doc-head-open.inc' %]
3
<title>Koha Housebound - [% surname %], [% firstname %]</title>
4
[% INCLUDE 'doc-head-close.inc' %]
5
[% INCLUDE 'calendar.inc' %]
6
<script type="text/javascript" language="javascript">
7
//<![CDATA[
8
    $(document).ready(function() {
9
        $("#dmy").datepicker({ minDate: "-1D",
10
                               dateFormat: "yy-mm-dd"
11
                             })
12
        $("#instance_form").validate()
13
    });
14
    function deleteInstance()
15
    {
16
        window.location="/cgi-bin/koha/members/houseboundinstances.pl?op=delsubmit&borrowernumber=[% borrowernumber %]&instanceid=[% delinstanceid %]&hbnumber=[% housebound.hbnumber %]";
17
    }
18
    function cancelInstance()
19
    {
20
        window.location="/cgi-bin/koha/members/housebound.pl?borrowernumber=[% borrowernumber %]";
21
    }
22
</script>
23
</head>
24
<body>
25
    [% INCLUDE 'header.inc' %]
26
    [% INCLUDE 'patron-search.inc' %]
27
28
    <div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/members/members-home.pl">Patrons</a>  &rsaquo; Housebound deliveries for [% firstname %] [% surname %] [% IF ( cardnumber ) %]([% cardnumber %])[% END %]</div>
29
    <div id="doc3" class="yui-t2">
30
        <div id="bd">
31
            <div id="yui-main">
32
                <div class="yui-b">
33
                    <h1>Housebound deliveries for [% title %] [% firstname %] [% surname %] [% IF ( cardnumber ) %]([% cardnumber %])[% END %]</h1>
34
                    <form name="form" id="instance_form" method="post" action="/cgi-bin/koha/members/houseboundinstances.pl">
35
                        <input type="hidden" name="op" value="[% op %]" />
36
                        <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
37
                        <input type="hidden" name="hbnumber" value="[% housebound.hbnumber %]" />
38
                        <input type="hidden" name="instanceid" value="[% instanceid %]" />
39
                        [% IF ( opdel ) %]
40
                            <p>Are you sure you want to delete this delivery?</p>
41
                            <p><button id="ybutton" onclick="deleteInstance(); return false;">YES</button>&nbsp;&nbsp;<button id="nbutton" onclick="cancelInstance(); return false;">NO</button></p>
42
                        [% ELSE %]
43
                            <fieldset class="rows" id="instance">
44
                                <legend>Delivery details</legend>
45
                                <ol>
46
                                    <li>
47
                                        <label for="dmy">Date: </label>
48
                                        <input type="text" id="dmy" name="dmy" size="20" value="[% instance.dmy %]" required/>
49
                                    </li>
50
                                    <li>
51
                                        <label for="time">Time:</label>
52
                                        <select id="time" name="time" required>
53
                                            <option value="">Select a time</option>
54
                                            [% IF ( instance.time == 'am' ) %]
55
                                                <option value="am" selected="selected">
56
                                            [% ELSE %]
57
                                                <option value="am">
58
                                            [% END %]
59
                                                am
60
                                            </option>
61
                                            [% IF ( instance.time == 'pm' ) %]
62
                                                <option value="pm" selected="selected">
63
                                            [% ELSE %]
64
                                                <option value="pm">
65
                                            [% END %]
66
                                                pm
67
                                            </option>
68
                                        </select>
69
                                    </li>
70
                                    <li>
71
                                        <label for="volunteer">Chooser/Deliverer:</label>
72
                                        <select id="volunteer" name="volunteer">
73
                                            <option value="">Select a chooser_deliverer</option>
74
                                            [% FOREACH vol IN volunteerlist %]
75
                                                    [% IF ( vol.volbornumber == instance.volunteer ) %]
76
                                                        <option value="[% vol.volbornumber %]"
77
                                                                selected="selected">
78
                                                    [% ELSE %]
79
                                                        <option value="[% vol.volbornumber %]">
80
                                                    [% END %]
81
                                                        [% vol.fullname %]
82
                                                    </option>
83
                                            [% END %]
84
                                        </select>
85
                                    </li>
86
                                    <li>
87
                                        <label for="chooser">Chooser:</label>
88
                                        <select id="chooser" name="chooser">
89
                                            <option value="">Select a chooser</option>
90
                                            [% FOREACH cho IN chooserlist %]
91
                                                [% IF ( cho.volbornumber == instance.chooser ) %]
92
                                                    <option value="[% cho.volbornumber %]"
93
                                                            selected="selected">
94
                                                [% ELSE %]
95
                                                    <option value="[% cho.volbornumber %]">
96
                                                [% END %]
97
                                                    [% cho.fullname %]
98
                                                </option>
99
                                            [% END %]
100
                                        </select>
101
                                    </li>
102
                                    <li>
103
                                        <label for="deliverer">Deliverer:</label>
104
                                        <select id="deliverer" name="deliverer">
105
                                            <option value="">Select a deliverer</option>
106
                                            [% FOREACH del IN delivererlist %]
107
                                                [% IF ( del.volbornumber == instance.deliverer ) %]
108
                                                    <option value="[% del.volbornumber %]"
109
                                                            selected="selected">
110
                                                [% ELSE %]
111
                                                    <option value="[% del.volbornumber %]">
112
                                                [% END %]
113
                                                    [% del.fullname %]
114
                                                </option>
115
                                            [% END %]
116
                                        </select>
117
                                    </li>
118
                                </ol>
119
                            </fieldset>
120
                            <fieldset class="action">
121
                                <input type="submit" value="Save" name="save">
122
                                <a class="cancel" href="/cgi-bin/koha/members/housebound.pl?borrowernumber=[% borrowernumber %]">Cancel</a>
123
                            </fieldset>
124
                        [% END %]
125
                    </form>
126
                </div>
127
            </div>
128
            <div class="yui-b">
129
                [% INCLUDE 'circ-menu.inc' %]
130
            </div>
131
        </div>
132
    </div>
133
    [% INCLUDE 'intranet-bottom.inc' %]
(-)a/members/housebound.pl (+91 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
# Copyright 2011 Mark Gavillet
4
# Copyright 2014 PTFS-Europe Ltd
5
#
6
# This file is part of Koha.
7
#
8
# Koha is free software; you can redistribute it and/or modify it under the
9
# terms of the GNU General Public License as published by the Free Software
10
# Foundation; either version 3 of the License, or (at your option) any later
11
# version.
12
#
13
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
14
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
16
#
17
# You should have received a copy of the GNU General Public License along
18
# with Koha; if not, write to the Free Software Foundation, Inc.,
19
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
21
use strict;
22
use warnings;
23
use CGI;
24
use C4::Context;
25
use C4::Auth;
26
use C4::Output;
27
use C4::Members;
28
use C4::Koha;
29
use C4::Branch;
30
use C4::Housebound qw( GetHouseboundDetails
31
                       GetCurrentHouseboundInstanceList );
32
33
my $input = CGI->new();
34
35
sub nl2br {
36
    my ($t) = shift or return;
37
    $t =~ s/\n/\n<br>/g;
38
    return ($t);
39
}
40
41
my $dbh = C4::Context->dbh;
42
43
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
44
    {
45
        template_name   => 'members/housebound.tmpl',
46
        query           => $input,
47
        type            => 'intranet',
48
        authnotrequired => 0,
49
        flagsrequired   => { borrowers => 1 },
50
        debug           => $ENV{DEBUG},
51
    }
52
);
53
54
my $borrowernumber = $input->param('borrowernumber');
55
56
my $borrowerdetails      = C4::Members::GetMemberDetails($borrowernumber);
57
my $branchdetail         = GetBranchDetail( $borrowerdetails->{branchcode} );
58
my $categorydetail       = GetMember( borrowernumber => $borrowernumber);
59
my $housebound           = GetHouseboundDetails($borrowernumber);
60
my $housebound_instances = GetCurrentHouseboundInstanceList($borrowernumber);
61
62
$template->param(
63
    surname        => $borrowerdetails->{surname},
64
    firstname      => $borrowerdetails->{firstname},
65
    cardnumber     => $borrowerdetails->{cardnumber},
66
    borrowernumber => $borrowerdetails->{borrowernumber},
67
    houseboundview => 'on',
68
    address        => $borrowerdetails->{address},
69
    address2       => $borrowerdetails->{address2},
70
    city           => $borrowerdetails->{city},
71
    phone          => $borrowerdetails->{phone},
72
    phonepro       => $borrowerdetails->{phonepro},
73
    mobile         => $borrowerdetails->{mobile},
74
    email          => $borrowerdetails->{email},
75
    emailpro       => $borrowerdetails->{emailpro},
76
    categoryname   => $categorydetail->{description},
77
    categorycode   => $borrowerdetails->{categorycode},
78
    branch         => $borrowerdetails->{branch},
79
    branchname     => $branchdetail->{branchname},
80
    zipcode        => $borrowerdetails->{zipcode}
81
);
82
83
$template->param(
84
    housebound   => $housebound
85
);
86
87
if ($housebound_instances) {
88
    $template->param( instanceloop => $housebound_instances );
89
}
90
91
output_html_with_http_headers $input, $cookie, $template->output;
(-)a/members/houseboundedit.pl (+114 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
# Copyright 2011 Mark Gavillet
4
# Copyright 2014 PTFS-Europe Ltd
5
#
6
# This file is part of Koha.
7
#
8
# Koha is free software; you can redistribute it and/or modify it under the
9
# terms of the GNU General Public License as published by the Free Software
10
# Foundation; either version 3 of the License, or (at your option) any later
11
# version.
12
#
13
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
14
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
16
#
17
# You should have received a copy of the GNU General Public License along
18
# with Koha; if not, write to the Free Software Foundation, Inc.,
19
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
21
use strict;
22
use warnings;
23
use CGI;
24
use C4::Context;
25
use C4::Auth;
26
use C4::Output;
27
use C4::Members;
28
use C4::Koha;
29
use C4::Branch;
30
use C4::Housebound qw( GetHouseboundDetails
31
                       UpdateHouseboundDetails
32
                       CreateHouseboundDetails );
33
34
my $input = CGI->new();
35
36
my $dbh = C4::Context->dbh;
37
38
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
39
    {
40
        template_name   => 'members/houseboundedit.tmpl',
41
        query           => $input,
42
        type            => 'intranet',
43
        authnotrequired => 0,
44
        flagsrequired   => { borrowers => 1 },
45
        debug           => $ENV{DEBUG},
46
    }
47
);
48
49
my $borrowernumber = $input->param('borrowernumber');
50
my $op             = $input->param('op');
51
if ( $op eq 'editsubmit' ) {
52
    UpdateHouseboundDetails(
53
        $input->param('hbnumber'),     $input->param('borrowernumber'),
54
        $input->param('day'),          $input->param('frequency'),
55
        $input->param('Itype_quant'),  $input->param('Item_subject'),
56
        $input->param('Item_authors'), $input->param('referral'),
57
        $input->param('notes')
58
    );
59
    my $url =
60
      "/cgi-bin/koha/members/housebound.pl?borrowernumber=$borrowernumber";
61
    print "Location: $url";
62
}
63
if ( $op eq 'addsubmit' ) {
64
    CreateHouseboundDetails(
65
        $input->param('borrowernumber'), $input->param('day'),
66
        $input->param('frequency'),      $input->param('Itype_quant'),
67
        $input->param('Item_subject'),   $input->param('Item_authors'),
68
        $input->param('referral'),       $input->param('notes')
69
    );
70
    my $url =
71
      "/cgi-bin/koha/members/housebound.pl?borrowernumber=$borrowernumber";
72
    print "Location: $url";
73
}
74
if ( $op eq 'edit' ) {
75
    $template->param( opeditsubmit => 'editsubmit' );
76
}
77
if ( $op eq 'add' ) {
78
    $template->param( opaddsubmit => 'addsubmit' );
79
}
80
81
my $borrowerdetails = C4::Members::GetMemberDetails($borrowernumber);
82
my $branchdetail    = GetBranchDetail( $borrowerdetails->{branchcode} );
83
my $categorydetail  = GetMember( borrowernumber => $borrowernumber );
84
my $housebound      = GetHouseboundDetails($borrowernumber);
85
86
87
$template->param(
88
    surname        => $borrowerdetails->{surname},
89
    firstname      => $borrowerdetails->{firstname},
90
    cardnumber     => $borrowerdetails->{cardnumber},
91
    borrowernumber => $borrowerdetails->{borrowernumber},
92
    address        => $borrowerdetails->{address},
93
    address2       => $borrowerdetails->{address2},
94
    city           => $borrowerdetails->{city},
95
    phone          => $borrowerdetails->{phone},
96
    phonepro       => $borrowerdetails->{phonepro},
97
    mobile         => $borrowerdetails->{mobile},
98
    email          => $borrowerdetails->{email},
99
    emailpro       => $borrowerdetails->{emailpro},
100
    categoryname   => $categorydetail->{description},
101
    categorycode   => $borrowerdetails->{categorycode},
102
    branch         => $borrowerdetails->{branch},
103
    branchname     => $branchdetail->{branchname},
104
    zipcode        => $borrowerdetails->{zipcode}
105
);
106
107
$template->param(
108
    housebound   => $housebound,
109
    houseboundview => 'on',
110
    days         => GetAuthorisedValues('day'),
111
    frequencies  => GetAuthorisedValues('frequency'),
112
);
113
114
output_html_with_http_headers $input, $cookie, $template->output;
(-)a/members/houseboundinstances.pl (+138 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
# Copyright 2011 Mark Gavillet
4
# Copyright 2014 PTFS-Europe Ltd
5
#
6
# This file is part of Koha.
7
#
8
# Koha is free software; you can redistribute it and/or modify it under the
9
# terms of the GNU General Public License as published by the Free Software
10
# Foundation; either version 3 of the License, or (at your option) any later
11
# version.
12
#
13
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
14
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
16
#
17
# You should have received a copy of the GNU General Public License along
18
# with Koha; if not, write to the Free Software Foundation, Inc.,
19
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
21
use strict;
22
use warnings;
23
use CGI;
24
use C4::Context;
25
use C4::Auth;
26
use C4::Output;
27
use C4::Members;
28
use C4::Koha;
29
use C4::Branch;
30
use C4::Dates;
31
use C4::Housebound qw( GetHouseboundDetails
32
                       GetHouseboundInstanceDetails
33
                       CreateHouseboundInstanceDetails
34
                       DeleteHouseboundInstanceDetails
35
                       UpdateHouseboundInstanceDetails
36
                       GetVolunteerList GetChooserList
37
                       GetDelivererList );
38
39
my $input = CGI->new();
40
41
my $dbh = C4::Context->dbh;
42
43
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
44
    {
45
        template_name   => 'members/houseboundinstances.tmpl',
46
        query           => $input,
47
        type            => 'intranet',
48
        authnotrequired => 0,
49
        flagsrequired   => { borrowers => 1 },
50
        debug           => $ENV{DEBUG},
51
    }
52
);
53
54
my $borrowernumber = $input->param('borrowernumber');
55
56
my $op = $input->param('op');
57
if ( $op eq 'add' ) {
58
    $template->param( opadd => 1, op => 'addsubmit' );
59
}
60
if ( $op eq 'edit' ) {
61
    $template->param( opedit => 1, op => 'editsubmit' );
62
}
63
if ( $op eq 'del' ) {
64
    $template->param( opdel => 1, op => 'delsubmit' );
65
}
66
if ( $op eq 'addsubmit' ) {
67
    CreateHouseboundInstanceDetails(
68
        $input->param('hbnumber'),  $input->param('dmy'),
69
        $input->param('time'),      $input->param('borrowernumber'),
70
        $input->param('volunteer'), $input->param('chooser'),
71
        $input->param('deliverer')
72
    );
73
    my $url =
74
      "/cgi-bin/koha/members/housebound.pl?borrowernumber=$borrowernumber";
75
    print "Location: $url";
76
}
77
if ( $op eq 'delsubmit' ) {
78
    DeleteHouseboundInstanceDetails( $input->param('instanceid') );
79
    my $url =
80
      "/cgi-bin/koha/members/housebound.pl?borrowernumber=$borrowernumber";
81
    print "Location: $url";
82
}
83
if ( $op eq 'editsubmit' ) {
84
    UpdateHouseboundInstanceDetails(
85
        $input->param('instanceid'),     $input->param('hbnumber'),
86
        $input->param('dmy'),            $input->param('time'),
87
        $input->param('borrowernumber'), $input->param('volunteer'),
88
        $input->param('chooser'),        $input->param('deliverer')
89
    );
90
    my $url =
91
      "/cgi-bin/koha/members/housebound.pl?borrowernumber=$borrowernumber";
92
    print "Location: $url";
93
}
94
95
my $borrowerdetails   = C4::Members::GetMemberDetails($borrowernumber);
96
my $branchdetail      = GetBranchDetail( $borrowerdetails->{branchcode} );
97
my $categorydetail    = GetMember( $borrowernumber, 'borrowernumber' );
98
my $housebound        = GetHouseboundDetails($borrowernumber);
99
my $volunteerlist     = GetVolunteerList();
100
my $chooserlist       = GetChooserList();
101
my $delivererlist     = GetDelivererList();
102
my $delinstanceid     = $input->param('instanceid');
103
my $instanceid        = $input->param('instanceid');
104
my $instancedetails   = GetHouseboundInstanceDetails($instanceid);
105
106
$template->param(
107
    surname        => $borrowerdetails->{surname},
108
    firstname      => $borrowerdetails->{firstname},
109
    cardnumber     => $borrowerdetails->{cardnumber},
110
    borrowernumber => $borrowerdetails->{borrowernumber},
111
    address        => $borrowerdetails->{address},
112
    address2       => $borrowerdetails->{address2},
113
    city           => $borrowerdetails->{city},
114
    phone          => $borrowerdetails->{phone},
115
    phonepro       => $borrowerdetails->{phonepro},
116
    mobile         => $borrowerdetails->{mobile},
117
    email          => $borrowerdetails->{email},
118
    emailpro       => $borrowerdetails->{emailpro},
119
    categoryname   => $categorydetail->{description},
120
    categorycode   => $borrowerdetails->{categorycode},
121
    branch         => $borrowerdetails->{branch},
122
    branchname     => $branchdetail->{branchname},
123
    zipcode        => $borrowerdetails->{zipcode}
124
);
125
126
$template->param(
127
    houseboundview           => 'on',
128
    housebound               => $housebound,
129
    DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
130
    volunteerlist            => $volunteerlist,
131
    chooserlist              => $chooserlist,
132
    delivererlist            => $delivererlist,
133
    delinstanceid            => $delinstanceid,
134
    instanceid               => $instanceid,
135
    instance                 => $instancedetails,
136
);
137
138
output_html_with_http_headers $input, $cookie, $template->output;
(-)a/t/Housebound.t (-1 / +292 lines)
Line 0 Link Here
0
- 
1
#!/usr/bin/perl
2
use strict;
3
use warnings;
4
5
use C4::Context;
6
use Test::More tests => 29;
7
use Test::MockModule;
8
use DBD::Mock;
9
10
use_ok('C4::Housebound');
11
12
use C4::Housebound qw( GetHouseboundDetails CreateHouseboundDetails
13
                       UpdateHouseboundDetails
14
                       GetCurrentHouseboundInstanceList
15
                       GetHouseboundInstanceDetails
16
                       UpdateHouseboundInstanceDetails
17
                       CreateHouseboundInstanceDetails
18
                       DeleteHouseboundInstanceDetails
19
                       GetVolunteerNameAndID GetVolunteerList
20
                       GetChooserList GetDelivererList CheckPrevIssue
21
                       );
22
23
# Setup mock db
24
my $module_context = new Test::MockModule('C4::Context');
25
$module_context->mock(
26
    '_new_dbh',
27
    sub {
28
        my $dbh = DBI->connect( 'DBI:Mock:', '', '' )
29
          || die "Cannot create handle: $DBI::errstr\n";
30
        return $dbh;
31
    }
32
);
33
34
my $dbh = C4::Context->dbh();
35
36
# convenience variables
37
my $name;
38
# mock_add_resultset vars
39
my ( $sql, $sql2, @bound_params, @keys, @values, %result ) = ( );
40
# mock_history_verification vars
41
my ( $history, $params, $query ) = ( );
42
43
sub clean_vars {
44
    ( $name, $sql, $sql2, @bound_params, @keys, @values, %result,
45
      $history, $params, $query ) = ( );
46
    $dbh->{mock_clear_history} = 1;
47
}
48
49
# Tests
50
## GetHouseboundDetails
51
$name         = 'GetHouseboundDetails';
52
$sql          = 'select * from housebound where borrowernumber=?';
53
@bound_params = ( 101 );
54
@keys         = qw< hbnumber day frequency borrowernumber Itype_quant
55
                    Item_subject Item_authors referral notes >;
56
@values       = qw< 5 Monday Week-2/4 101 books dvd thrillers cooke
57
                    alex none >;
58
foreach my $i ( 0 .. $#keys) {
59
    $result{$keys[$i]} = $values[$i];
60
}
61
62
is( GetHouseboundDetails('unknown'), undef,
63
    $name . ': Return value "undefined".' );
64
65
$dbh->{mock_add_resultset} =
66
  {
67
   sql          => $sql,
68
   bound_params => [ @bound_params ],
69
   results      => [ [ @keys ], [ @values ] ],
70
  };
71
72
is_deeply( GetHouseboundDetails($bound_params[0]), \%result,
73
           $name . ': Return value "$result".' );
74
75
clean_vars();
76
77
## CreateHouseboundDetails
78
$name      = 'CreateHouseboundDetails';
79
$sql       = 'insert into housebound'
80
  . ' (day, frequency, borrowernumber, Itype_quant, Item_subject,'
81
  . ' Item_authors, referral, notes) values (?,?,?,?,?,?,?,?)';
82
@keys      = qw< day frequency borrowernumber Itype_quant Item_subject
83
                 Item_authors referral notes >;
84
@values    = qw< Tuesday Week-3/4 103 journals psychology sam bob $name >;
85
86
is( CreateHouseboundDetails($values[2], $values[0], $values[1], $values[3],
87
                            $values[4], $values[5], $values[6], $values[7]),
88
    undef, $name . ': Return value "undefined".');
89
90
$history = $dbh->{mock_all_history};
91
$query = $history->[0];
92
$params = $query->bound_params;
93
94
is($query->statement, $sql, $name . ': Correct statement generated' );
95
is(scalar(@{$params}), scalar(@values),
96
   $name . ': Correct number of parameters bound.' );
97
is_deeply( $params, \@values,
98
           $name . ': Correct parameter values passed.' );
99
100
clean_vars();
101
102
## UpdateHouseboundDetails
103
$name = 'UpdateHouseboundDetails';
104
$sql  = 'update housebound set day=?,frequency=?,borrowernumber=?,'
105
  . 'Itype_quant=?,Item_subject=?,Item_authors=?,referral=?,notes=?'
106
  . ' where hbnumber=?',
107
@keys      = qw< day frequency borrowernumber Itype_quant Item_subject
108
                 Item_authors referral notes hbnumber>;
109
@values    = qw< Tuesday Week-3/4 103 journals psychology sam bob $name 1>;
110
is( UpdateHouseboundDetails( $values[8], $values[2], $values[0], $values[1],
111
                             $values[3], $values[4], $values[5], $values[6],
112
                             $values[7] ),
113
    undef, $name . ': Return value "undefined".');
114
115
$history = $dbh->{mock_all_history};
116
$query = $history->[0];
117
$params = $query->bound_params;
118
119
is($query->statement, $sql, $name . ': Correct statement generated' );
120
is(scalar(@{$params}), scalar(@values),
121
   $name . ': Correct number of parameters bound.');
122
is_deeply( $params, \@values,
123
           $name . ': Correct parameter values passed.');
124
125
clean_vars();
126
127
## GetCurrentHouseboundInstanceList
128
### GetcurrentHouseboundInstanceList's Slice causes
129
### mock dbd to fail
130
### Cannot test.
131
132
## GetVolunteerNameAndID
133
$name         = "GetVolunteerNameAndID";
134
$sql          = 'select borrowernumber,title,firstname,surname'
135
  . ' from borrowers where borrowernumber=?';
136
@bound_params = ( 101 );
137
@keys      = qw< borrowernumber title firstname surname >;
138
@values    = qw< 101 Mr John Doe >;
139
foreach my $i ( 0 .. $#keys) {
140
    $result{$keys[$i]} = $values[$i];
141
}
142
143
is( GetVolunteerNameAndID($bound_params[0]), undef,
144
    $name . ': Return value "undefined".' );
145
146
$dbh->{mock_add_resultset} =
147
  {
148
   sql          => $sql,
149
   bound_params => [ @bound_params ],
150
   results      => [ [ @keys ], [ @values ] ],
151
  };
152
153
is_deeply( GetVolunteerNameAndID($bound_params[0]),
154
           \%result, $name . ': Return value "$result".' );
155
156
clean_vars();
157
158
## GetVolunteerList
159
### GetVolunteerList's Slice causes mock dbd to fail
160
### Cannot test.
161
162
## GetHouseboundInstanceDetails
163
$name         = 'GetHouseboundInstanceDetails';
164
$sql          = 'SELECT * from housebound_instance where instanceid=?';
165
@bound_params = ( 1 );
166
@keys      = qw< instanceid hbnumber dmy time borrowernumber volunteer
167
                 chooser deliverer >;
168
@values    = qw< 1 5 2014-03-31 am 101 102 103 104 >;
169
foreach my $i ( 0 .. $#keys) {
170
    $result{$keys[$i]} = $values[$i];
171
}
172
173
is( GetHouseboundInstanceDetails('1'), undef,
174
    $name . ': Return value "undefined".' );
175
176
$dbh->{mock_add_resultset} =
177
  {
178
   sql          => $sql,
179
   bound_params => [ @bound_params ],
180
   results      => [ [ @keys ], [ @values ] ],
181
  };
182
183
is_deeply( GetHouseboundInstanceDetails('1'), \%result,
184
           $name . ': Return value "$result".' );
185
186
clean_vars();
187
188
## UpdateHouseboundInstanceDetails
189
$name      = "UpdateHouseboundInstanceDetails";
190
$sql       = 'update housebound_instance set hbnumber=?, dmy=?,'
191
  . ' time=?, borrowernumber=?, volunteer=?, chooser=?, deliverer=?'
192
  . ' where instanceid=?';
193
@keys      = qw< hbnumber dmy time borrowernumber volunteer chooser
194
                 deliverer instanceid >;
195
@values    = qw< 5 2014-03-31 am 101 102 103 104 1 >;
196
197
is( UpdateHouseboundInstanceDetails( $values[7], $values[0], $values[1],
198
                                     $values[2], $values[3], $values[4],
199
                                     $values[5], $values[6] ), undef,
200
    $name . ': Return value "undefined".' );
201
202
$history = $dbh->{mock_all_history};
203
$query = $history->[0];
204
$params = $query->bound_params;
205
206
is($query->statement, $sql, $name . ': Correct statement generated' );
207
is(scalar(@{$params}), scalar(@values),
208
   $name . ': Correct number of parameters bound.');
209
is_deeply( $params, \@values,
210
           $name . ': Correct parameter values passed.');
211
212
clean_vars();
213
214
## CreateHouseboundInstanceDetails
215
$name      = "CreateHouseboundInstanceDetails";
216
$sql       = 'insert into housebound_instance'
217
  . ' (hbnumber, dmy, time, borrowernumber, volunteer, chooser, deliverer)'
218
  . ' values (?,?,?,?,?,?,?)';
219
@keys      = qw< hbnumber dmy time borrowernumber volunteer chooser
220
                 deliverer >;
221
@values    = qw< 5 2014-03-31 am 101 102 103 104 >;
222
223
is( CreateHouseboundInstanceDetails( @values ), undef,
224
    $name . ': Return value "undefined".');
225
226
$history = $dbh->{mock_all_history};
227
$query = $history->[0];
228
$params = $query->bound_params;
229
230
is($query->statement, $sql, $name . ': Correct statement generated' );
231
is(scalar(@{$params}), scalar(@values),
232
   $name . ': Correct number of parameters bound.' );
233
is_deeply( $params, \@values,
234
           $name . ': Correct parameter values passed.' );
235
236
$dbh->{mock_clear_history} = 1;
237
238
## DeleteHouseboundInstanceDetails
239
$name      = 'DeleteHouseboundInstanceDetails';
240
$sql       = 'delete from housebound_instance where instanceid=?';
241
@keys      = qw< instanceid >;
242
@values    = qw< 1 >;
243
244
is( DeleteHouseboundInstanceDetails( @values ), undef,
245
    $name . ': Return value "undefined".');
246
247
$history = $dbh->{mock_all_history};
248
$query = $history->[0];
249
$params = $query->bound_params;
250
251
is($query->statement, $sql, $name . ': Correct statement generated' );
252
is(scalar(@{$params}), scalar(@values),
253
   $name . ': Correct number of parameters bound.' );
254
is_deeply( $params, \@values,
255
           $name . ': Correct parameter values passed.' );
256
257
clean_vars();
258
259
## CheckPrevIssue
260
$name      = 'CheckPrevIssue';
261
$sql       = 'select itemnumber from items where biblionumber=?';
262
$sql2      = 'select count(itemnumber) from old_issues'
263
  . ' where borrowernumber=? and itemnumber=?';
264
@keys      = qw< borrowernumber biblionumber itemnumber >;
265
@values    = qw< 101 3576 5043 >;
266
267
# 1) Prepop items with itemnumber for result
268
$dbh->{mock_add_resultset} = {
269
    sql          => $sql,
270
    bound_params => $keys[1],
271
    results      => [ [ ( $keys[2] ) ], [ ( $values[2] ) ] ],
272
   };
273
# 2) Test if never issued before (expect 0)
274
is( CheckPrevIssue( $keys[0], $keys[1] ), 0,
275
    $name . ': Return value "no matches".' );
276
# 3) Prepop old_issues with itemnumber and borrowernumber
277
$dbh->{mock_add_resultset} = {
278
    sql          => $sql2,
279
    bound_params => [ $keys[0], $keys[2] ],
280
    results      => [
281
                     [ ( $keys[0], $keys[2] ) ],
282
                     [ ( $values[0], $values[2] ) ],
283
                     [ ( $values[0], $values[2] ) ],
284
                     [ ( $values[0], $values[2] ) ],
285
                     [ ( $values[0], $values[2] ) ],
286
                    ],
287
   };
288
# 4) Test if issued before (e.g. 7 times — expect 1)
289
is( CheckPrevIssue( $keys[0], $keys[1] ), 1,
290
    $name . ': Return value "> 0 matches".' );
291
292
clean_vars();

Return to bug 5670