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

(-)a/C4/Auth.pm (-8 / +44 lines)
Lines 29-34 use C4::Context; Link Here
29
use C4::Templates;    # to get the template
29
use C4::Templates;    # to get the template
30
use C4::Languages;
30
use C4::Languages;
31
use C4::Branch;       # GetBranches
31
use C4::Branch;       # GetBranches
32
use C4::Desks;
32
use C4::Search::History;
33
use C4::Search::History;
33
use Koha;
34
use Koha;
34
use Koha::AuthUtils qw(hash_password);
35
use Koha::AuthUtils qw(hash_password);
Lines 405-410 sub get_template_and_user { Link Here
405
            IntranetmainUserblock                                                      => C4::Context->preference("IntranetmainUserblock"),
406
            IntranetmainUserblock                                                      => C4::Context->preference("IntranetmainUserblock"),
406
            LibraryName                                                                => C4::Context->preference("LibraryName"),
407
            LibraryName                                                                => C4::Context->preference("LibraryName"),
407
            LoginBranchname                                                            => ( C4::Context->userenv ? C4::Context->userenv->{"branchname"} : undef ),
408
            LoginBranchname                                                            => ( C4::Context->userenv ? C4::Context->userenv->{"branchname"} : undef ),
409
            LoginDeskname                                                              => ( C4::Context->userenv ? C4::Context->userenv->{"deskname"} : undef ),
408
            advancedMARCEditor                                                         => C4::Context->preference("advancedMARCEditor"),
410
            advancedMARCEditor                                                         => C4::Context->preference("advancedMARCEditor"),
409
            canreservefromotherbranches                                                => C4::Context->preference('canreservefromotherbranches'),
411
            canreservefromotherbranches                                                => C4::Context->preference('canreservefromotherbranches'),
410
            intranetcolorstylesheet                                                    => C4::Context->preference("intranetcolorstylesheet"),
412
            intranetcolorstylesheet                                                    => C4::Context->preference("intranetcolorstylesheet"),
Lines 425-431 sub get_template_and_user { Link Here
425
            UseKohaPlugins                                                             => C4::Context->preference('UseKohaPlugins'),
427
            UseKohaPlugins                                                             => C4::Context->preference('UseKohaPlugins'),
426
            UseCourseReserves                                                          => C4::Context->preference("UseCourseReserves"),
428
            UseCourseReserves                                                          => C4::Context->preference("UseCourseReserves"),
427
            useDischarge                                                               => C4::Context->preference('useDischarge'),
429
            useDischarge                                                               => C4::Context->preference('useDischarge'),
428
        );
430
                        );
431
        if ( C4::Context->userenv ? C4::Context->userenv->{"branch"} : undef) {
432
            my $desksaref = GetDesks(C4::Context->userenv->{"branch"});
433
            if ($#$desksaref > -1) {
434
                $template->param(
435
                                 LoginDeskcode => ( C4::Context->userenv->{"deskcode"} ),
436
                                 LoginDeskname => ( C4::Context->userenv->{"deskname"} ),
437
                                 HasDesk       => (1),
438
                                );
439
            }
440
            else {
441
                $template->param(
442
                                 HasDesk       => ( undef ),
443
                                );
444
            }
445
        }
429
    }
446
    }
430
    else {
447
    else {
431
        warn "template type should be OPAC, here it is=[" . $in->{'type'} . "]" unless ( $in->{'type'} eq 'opac' );
448
        warn "template type should be OPAC, here it is=[" . $in->{'type'} . "]" unless ( $in->{'type'} eq 'opac' );
Lines 474-479 sub get_template_and_user { Link Here
474
            LibraryName                           => "" . C4::Context->preference("LibraryName"),
491
            LibraryName                           => "" . C4::Context->preference("LibraryName"),
475
            LibraryNameTitle                      => "" . $LibraryNameTitle,
492
            LibraryNameTitle                      => "" . $LibraryNameTitle,
476
            LoginBranchname                       => C4::Context->userenv ? C4::Context->userenv->{"branchname"} : "",
493
            LoginBranchname                       => C4::Context->userenv ? C4::Context->userenv->{"branchname"} : "",
494
            Logindeskname                         => C4::Context->userenv ? C4::Context->userenv->{"deskname"} : "",
477
            OPACAmazonCoverImages                 => C4::Context->preference("OPACAmazonCoverImages"),
495
            OPACAmazonCoverImages                 => C4::Context->preference("OPACAmazonCoverImages"),
478
            OPACFRBRizeEditions                   => C4::Context->preference("OPACFRBRizeEditions"),
496
            OPACFRBRizeEditions                   => C4::Context->preference("OPACFRBRizeEditions"),
479
            OpacHighlightedWords                  => C4::Context->preference("OpacHighlightedWords"),
497
            OpacHighlightedWords                  => C4::Context->preference("OpacHighlightedWords"),
Lines 762-768 sub checkauth { Link Here
762
                $session->param('surname'),      $session->param('branch'),
780
                $session->param('surname'),      $session->param('branch'),
763
                $session->param('branchname'),   $session->param('flags'),
781
                $session->param('branchname'),   $session->param('flags'),
764
                $session->param('emailaddress'), $session->param('branchprinter'),
782
                $session->param('emailaddress'), $session->param('branchprinter'),
765
                $session->param('persona'),      $session->param('shibboleth')
783
                $session->param('persona'),      $session->param('shibboleth'),
784
                $session->param('deskcode'),     $session->param('deskname')
766
            );
785
            );
767
            C4::Context::set_shelves_userenv( 'bar', $session->param('barshelves') );
786
            C4::Context::set_shelves_userenv( 'bar', $session->param('barshelves') );
768
            C4::Context::set_shelves_userenv( 'pub', $session->param('pubshelves') );
787
            C4::Context::set_shelves_userenv( 'pub', $session->param('pubshelves') );
Lines 986-992 sub checkauth { Link Here
986
                    C4::Context->_unset_userenv($sessionID);
1005
                    C4::Context->_unset_userenv($sessionID);
987
                }
1006
                }
988
                my ( $borrowernumber, $firstname, $surname, $userflags,
1007
                my ( $borrowernumber, $firstname, $surname, $userflags,
989
                    $branchcode, $branchname, $branchprinter, $emailaddress );
1008
                     $branchcode, $branchname, $branchprinter, $emailaddress,
1009
                     $deskcode, $deskname);
990
1010
991
                if ( $return == 1 ) {
1011
                if ( $return == 1 ) {
992
                    my $select = "
1012
                    my $select = "
Lines 1062-1067 sub checkauth { Link Here
1062
                    $session->param( 'surname',      $surname );
1082
                    $session->param( 'surname',      $surname );
1063
                    $session->param( 'branch',       $branchcode );
1083
                    $session->param( 'branch',       $branchcode );
1064
                    $session->param( 'branchname',   $branchname );
1084
                    $session->param( 'branchname',   $branchname );
1085
                    $session->param( 'deskcode',     $deskcode );
1086
                    $session->param( 'deskname',     $deskname );
1065
                    $session->param( 'flags',        $userflags );
1087
                    $session->param( 'flags',        $userflags );
1066
                    $session->param( 'emailaddress', $emailaddress );
1088
                    $session->param( 'emailaddress', $emailaddress );
1067
                    $session->param( 'ip',           $session->remote_addr() );
1089
                    $session->param( 'ip',           $session->remote_addr() );
Lines 1080-1085 sub checkauth { Link Here
1080
                    $session->param( 'surname',      C4::Context->config('user') );
1102
                    $session->param( 'surname',      C4::Context->config('user') );
1081
                    $session->param( 'branch',       'NO_LIBRARY_SET' );
1103
                    $session->param( 'branch',       'NO_LIBRARY_SET' );
1082
                    $session->param( 'branchname',   'NO_LIBRARY_SET' );
1104
                    $session->param( 'branchname',   'NO_LIBRARY_SET' );
1105
                    $session->param( 'deskcode',     'NO_DESK_SET' );
1106
                    $session->param( 'deskname',     'NO_DESK_SET' );
1083
                    $session->param( 'flags',        1 );
1107
                    $session->param( 'flags',        1 );
1084
                    $session->param( 'emailaddress', C4::Context->preference('KohaAdminEmailAddress') );
1108
                    $session->param( 'emailaddress', C4::Context->preference('KohaAdminEmailAddress') );
1085
                    $session->param( 'ip',           $session->remote_addr() );
1109
                    $session->param( 'ip',           $session->remote_addr() );
Lines 1094-1100 sub checkauth { Link Here
1094
                    $session->param('surname'),      $session->param('branch'),
1118
                    $session->param('surname'),      $session->param('branch'),
1095
                    $session->param('branchname'),   $session->param('flags'),
1119
                    $session->param('branchname'),   $session->param('flags'),
1096
                    $session->param('emailaddress'), $session->param('branchprinter'),
1120
                    $session->param('emailaddress'), $session->param('branchprinter'),
1097
                    $session->param('persona'),      $session->param('shibboleth')
1121
                    $session->param('persona'),      $session->param('shibboleth'),
1122
                    $session->param('deskcode'),     $session->param('deskname')
1098
                );
1123
                );
1099
1124
1100
            }
1125
            }
Lines 1343-1349 sub check_api_auth { Link Here
1343
                $session->param('cardnumber'),   $session->param('firstname'),
1368
                $session->param('cardnumber'),   $session->param('firstname'),
1344
                $session->param('surname'),      $session->param('branch'),
1369
                $session->param('surname'),      $session->param('branch'),
1345
                $session->param('branchname'),   $session->param('flags'),
1370
                $session->param('branchname'),   $session->param('flags'),
1346
                $session->param('emailaddress'), $session->param('branchprinter')
1371
                $session->param('emailaddress'), $session->param('branchprinter'),
1372
                $session->param('persona'),      $session->param('shibboleth'),
1373
                $session->param('deskcode'),     $session->param('deskname')
1347
            );
1374
            );
1348
1375
1349
            my $ip       = $session->param('ip');
1376
            my $ip       = $session->param('ip');
Lines 1430-1436 sub check_api_auth { Link Here
1430
                my (
1457
                my (
1431
                    $borrowernumber, $firstname,  $surname,
1458
                    $borrowernumber, $firstname,  $surname,
1432
                    $userflags,      $branchcode, $branchname,
1459
                    $userflags,      $branchcode, $branchname,
1433
                    $branchprinter,  $emailaddress
1460
                    $branchprinter,  $emailaddress, $deskcode,
1461
                    $deskname
1434
                );
1462
                );
1435
                my $sth =
1463
                my $sth =
1436
                  $dbh->prepare(
1464
                  $dbh->prepare(
Lines 1491-1496 sub check_api_auth { Link Here
1491
                $session->param( 'surname',      $surname );
1519
                $session->param( 'surname',      $surname );
1492
                $session->param( 'branch',       $branchcode );
1520
                $session->param( 'branch',       $branchcode );
1493
                $session->param( 'branchname',   $branchname );
1521
                $session->param( 'branchname',   $branchname );
1522
                $session->param( 'deskcode',     $deskcode );
1523
                $session->param( 'deskname',     $deskname );
1494
                $session->param( 'flags',        $userflags );
1524
                $session->param( 'flags',        $userflags );
1495
                $session->param( 'emailaddress', $emailaddress );
1525
                $session->param( 'emailaddress', $emailaddress );
1496
                $session->param( 'ip',           $session->remote_addr() );
1526
                $session->param( 'ip',           $session->remote_addr() );
Lines 1505-1510 sub check_api_auth { Link Here
1505
                $session->param( 'surname',      C4::Context->config('user') );
1535
                $session->param( 'surname',      C4::Context->config('user') );
1506
                $session->param( 'branch',       'NO_LIBRARY_SET' );
1536
                $session->param( 'branch',       'NO_LIBRARY_SET' );
1507
                $session->param( 'branchname',   'NO_LIBRARY_SET' );
1537
                $session->param( 'branchname',   'NO_LIBRARY_SET' );
1538
                $session->param( 'deskcode',     'NO_DESK_SET' );
1539
                $session->param( 'deskname',     'NO_DESK_SET' );
1508
                $session->param( 'flags',        1 );
1540
                $session->param( 'flags',        1 );
1509
                $session->param( 'emailaddress', C4::Context->preference('KohaAdminEmailAddress') );
1541
                $session->param( 'emailaddress', C4::Context->preference('KohaAdminEmailAddress') );
1510
                $session->param( 'ip',           $session->remote_addr() );
1542
                $session->param( 'ip',           $session->remote_addr() );
Lines 1515-1521 sub check_api_auth { Link Here
1515
                $session->param('cardnumber'),   $session->param('firstname'),
1547
                $session->param('cardnumber'),   $session->param('firstname'),
1516
                $session->param('surname'),      $session->param('branch'),
1548
                $session->param('surname'),      $session->param('branch'),
1517
                $session->param('branchname'),   $session->param('flags'),
1549
                $session->param('branchname'),   $session->param('flags'),
1518
                $session->param('emailaddress'), $session->param('branchprinter')
1550
                $session->param('emailaddress'), $session->param('branchprinter'),
1551
                $session->param('persona'),      $session->param('shibboleth'),
1552
                $session->param('deskcode'),     $session->param('deskname'),
1519
            );
1553
            );
1520
            return ( "ok", $cookie, $sessionID );
1554
            return ( "ok", $cookie, $sessionID );
1521
        } else {
1555
        } else {
Lines 1596-1602 sub check_cookie_auth { Link Here
1596
            $session->param('cardnumber'),   $session->param('firstname'),
1630
            $session->param('cardnumber'),   $session->param('firstname'),
1597
            $session->param('surname'),      $session->param('branch'),
1631
            $session->param('surname'),      $session->param('branch'),
1598
            $session->param('branchname'),   $session->param('flags'),
1632
            $session->param('branchname'),   $session->param('flags'),
1599
            $session->param('emailaddress'), $session->param('branchprinter')
1633
            $session->param('emailaddress'), $session->param('branchprinter'),
1634
            $session->param('persona'),      $session->param('shibboleth'),
1635
            $session->param('deskcode'),     $session->param('deskname'),
1600
        );
1636
        );
1601
1637
1602
        my $ip       = $session->param('ip');
1638
        my $ip       = $session->param('ip');
(-)a/C4/Context.pm (-2 / +5 lines)
Lines 1047-1053 sub userenv { Link Here
1047
  C4::Context->set_userenv($usernum, $userid, $usercnum,
1047
  C4::Context->set_userenv($usernum, $userid, $usercnum,
1048
                           $userfirstname, $usersurname,
1048
                           $userfirstname, $usersurname,
1049
                           $userbranch, $branchname, $userflags,
1049
                           $userbranch, $branchname, $userflags,
1050
                           $emailaddress, $branchprinter, $persona);
1050
                           $emailaddress, $branchprinter, $persona,
1051
                           $desk, $deskcode);
1051
1052
1052
Establish a hash of user environment variables.
1053
Establish a hash of user environment variables.
1053
1054
Lines 1058-1064 set_userenv is called in Auth.pm Link Here
1058
#'
1059
#'
1059
sub set_userenv {
1060
sub set_userenv {
1060
    shift @_;
1061
    shift @_;
1061
    my ($usernum, $userid, $usercnum, $userfirstname, $usersurname, $userbranch, $branchname, $userflags, $emailaddress, $branchprinter, $persona, $shibboleth)=
1062
    my ($usernum, $userid, $usercnum, $userfirstname, $usersurname, $userbranch, $branchname, $userflags, $emailaddress, $branchprinter, $persona, $shibboleth, $deskcode, $deskname)=
1062
    map { Encode::is_utf8( $_ ) ? $_ : Encode::decode('UTF-8', $_) } # CGI::Session doesn't handle utf-8, so we decode it here
1063
    map { Encode::is_utf8( $_ ) ? $_ : Encode::decode('UTF-8', $_) } # CGI::Session doesn't handle utf-8, so we decode it here
1063
    @_;
1064
    @_;
1064
    my $var=$context->{"activeuser"} || '';
1065
    my $var=$context->{"activeuser"} || '';
Lines 1075-1080 sub set_userenv { Link Here
1075
        "emailaddress"     => $emailaddress,
1076
        "emailaddress"     => $emailaddress,
1076
        "branchprinter"    => $branchprinter,
1077
        "branchprinter"    => $branchprinter,
1077
        "persona"    => $persona,
1078
        "persona"    => $persona,
1079
	"deskcode"   => $deskcode,
1080
	"deskname"   => $deskname,
1078
        "shibboleth" => $shibboleth,
1081
        "shibboleth" => $shibboleth,
1079
    };
1082
    };
1080
    $context->{userenv}->{$var} = $cell;
1083
    $context->{userenv}->{$var} = $cell;
(-)a/C4/Desks.pm (+183 lines)
Line 0 Link Here
1
# This file is part of Koha.
2
#
3
# Copyright (C) 2011 Progilone
4
# Copyright (C) 2015 BULAC
5
#
6
# Koha is free software; you can redistribute it and/or modify it
7
# under the terms of the GNU General Public License as published by
8
# the Free Software Foundation; either version 3 of the License, or
9
# (at your option) any later version.
10
#
11
# Koha is distributed in the hope that it will be useful, but
12
# WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
# GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License
17
# along with Koha; if not, see <http://www.gnu.org/licenses>.
18
19
package C4::Desks;
20
21
use Modern::Perl;
22
23
use C4::Context;
24
use vars qw(@ISA @EXPORT);
25
26
BEGIN {
27
    require Exporter;
28
    @ISA       = qw(Exporter);
29
    @EXPORT = qw(
30
		       &AddDesk
31
		       &ModDesk
32
		       &DelDesk
33
		       &GetDesk
34
		       &GetDesks
35
		  );
36
}
37
38
=head1 NAME
39
40
C4::Desks - Desk management functions
41
42
=head1 DESCRIPTION
43
44
This module contains an API for manipulating issue desks in Koha. It
45
is used by circulation.
46
47
=head1 HISTORICAL NOTE
48
49
Developped by Progilone on a customised Koha 3.2 for BULAC
50
library. The module is ported to Koha 3.19 and up by the BULAC.
51
52
=cut
53
54
=head2 AddDesk
55
56
  AddDesk({
57
    'deskcode'        => $deskcode,
58
    'deskname'        => $deskname,
59
    'deskdescription' => $deskdescription
60
    'branchcode'      => $branchcode });
61
62
  returns 1 on success, undef on error. A return value greater than 1
63
  or just -1 means something went wrong.
64
65
=cut
66
67
sub AddDesk {
68
    my ($args) = @_;
69
    C4::Context->dbh->do
70
	    ('INSERT INTO desks ' .
71
	     '(deskcode, deskname, deskdescription, branchcode) ' .
72
	     'VALUES (?,?,?,?)' ,
73
	     undef,
74
	     $args->{'deskcode'},
75
	     $args->{'deskname'},
76
	     $args->{'deskdescription'},
77
	     $args->{'branchcode'},
78
	    );
79
}
80
81
=head2 DelDesk
82
83
  DelDesk($deskcode)
84
85
  returns 1 on success, undef on error. A return value greater than 1
86
  or just -1 means something went wrong.
87
88
=cut
89
90
sub DelDesk {
91
    my $deskcode = shift;
92
    C4::Context->dbh->do
93
	    ('DELETE FROM desks WHERE deskcode = ?',
94
	     undef,
95
	     $deskcode
96
	    );
97
}
98
99
=head2 GetDesk
100
101
  $desk_href = GetDesk($deskcode);
102
103
  returns undef when no desk matches $deskcode, return a href
104
  containing desk parameters:
105
    {'deskcode' => $deskcode,
106
     'deskname' => $deskname,
107
     'deskdescription' => $deskdescription,
108
     'branchcode' => $branchcode }
109
110
=cut
111
112
sub GetDesk {
113
    my $deskcode = shift;
114
    my $query = '
115
        SELECT *
116
        FROM desks
117
        WHERE deskcode = ?';
118
119
    my $sth = C4::Context->dbh->prepare($query);
120
    $sth->execute($deskcode);
121
    $sth->fetchrow_hashref;
122
}
123
124
=head2 GetDesks
125
126
    $desk_aref = GetDesks([$branch])
127
128
    returns an array ref containing deskcodes. If no desks are
129
    available, the array is empty.
130
131
=cut
132
133
sub GetDesks  {
134
    my $branchcode   = shift || '';
135
    my $retaref = [];
136
    my $query = 'SELECT deskcode FROM desks';
137
    if ($branchcode) {
138
        $query = $query . ' WHERE branchcode = ?';
139
    }
140
    my $sth = C4::Context->dbh->prepare($query);
141
    if ($branchcode) {
142
	$sth->execute($branchcode);
143
    } else {
144
	$sth->execute();
145
    }
146
    while (my $rowaref = $sth->fetchrow_arrayref()) {
147
	push @{ $retaref }, $rowaref->[0];
148
    }
149
    return $retaref;
150
}
151
152
=head2 ModDesks
153
154
    $deskhref = {
155
       'deskcode' => $deskcode,
156
       'deskname' => $deskname,
157
       'deskdescription' => $deskdescription,
158
       'branchcode' => $branchcode
159
    }
160
    ModDesks($deskhref)
161
162
    Modify desk with $deskcode with values contained in various
163
    $deskhref fields. Returns 1 on success, 0 if no desk were
164
    modified, undef, -1 or an int greater than 1 if something went
165
    terribly wrong.
166
167
=cut
168
169
sub ModDesk {
170
    my ($args) = @_;
171
    C4::Context->dbh->do('UPDATE desks SET deskname = ? , ' .
172
			 'deskdescription = ? , ' .
173
			 'branchcode = ? ' .
174
			 'WHERE deskcode = ?' ,
175
			 undef,
176
			 $args->{'deskname'},
177
			 $args->{'deskdescription'},
178
			 $args->{'branchcode'},
179
			 $args->{'deskcode'}
180
			);
181
}
182
183
1;
(-)a/C4/Reserves.pm (-3 / +17 lines)
Lines 738-744 sub GetReservesForBranch { Link Here
738
    my $dbh = C4::Context->dbh;
738
    my $dbh = C4::Context->dbh;
739
739
740
    my $query = "
740
    my $query = "
741
        SELECT reserve_id,borrowernumber,reservedate,itemnumber,waitingdate
741
        SELECT reserve_id,borrowernumber,reservedate,itemnumber,waitingdate, deskcode
742
        FROM   reserves 
742
        FROM   reserves 
743
        WHERE   priority='0'
743
        WHERE   priority='0'
744
        AND found='W'
744
        AND found='W'
Lines 1251-1257 sub ModReserveStatus { Link Here
1251
1251
1252
=head2 ModReserveAffect
1252
=head2 ModReserveAffect
1253
1253
1254
  &ModReserveAffect($itemnumber,$borrowernumber,$diffBranchSend);
1254
  &ModReserveAffect($itemnumber,$borrowernumber,$diffBranchSend, $deskcode);
1255
1255
1256
This function affect an item and a status for a given reserve
1256
This function affect an item and a status for a given reserve
1257
The itemnumber parameter is used to find the biblionumber.
1257
The itemnumber parameter is used to find the biblionumber.
Lines 1265-1271 take care of the waiting status Link Here
1265
=cut
1265
=cut
1266
1266
1267
sub ModReserveAffect {
1267
sub ModReserveAffect {
1268
    my ( $itemnumber, $borrowernumber,$transferToDo ) = @_;
1268
    my ( $itemnumber, $borrowernumber,$transferToDo, $deskcode ) = @_;
1269
    my $dbh = C4::Context->dbh;
1269
    my $dbh = C4::Context->dbh;
1270
1270
1271
    # we want to attach $itemnumber to $borrowernumber, find the biblionumber
1271
    # we want to attach $itemnumber to $borrowernumber, find the biblionumber
Lines 1296-1301 sub ModReserveAffect { Link Here
1296
          AND biblionumber = ?
1296
          AND biblionumber = ?
1297
    ";
1297
    ";
1298
    }
1298
    }
1299
    elsif ($deskcode) {
1300
        # add deskcode with waiting
1301
        $query = "
1302
            UPDATE reserves
1303
            SET     priority = 0,
1304
                    found = 'W',
1305
                    waitingdate = NOW(),
1306
                    deskcode = '$deskcode',
1307
                    itemnumber = ?
1308
            WHERE borrowernumber = ?
1309
              AND biblionumber = ?
1310
        ";
1311
    }
1299
    else {
1312
    else {
1300
    # affect the reserve to Waiting as well.
1313
    # affect the reserve to Waiting as well.
1301
        $query = "
1314
        $query = "
Lines 1303-1308 sub ModReserveAffect { Link Here
1303
            SET     priority = 0,
1316
            SET     priority = 0,
1304
                    found = 'W',
1317
                    found = 'W',
1305
                    waitingdate = NOW(),
1318
                    waitingdate = NOW(),
1319
                    deskcode = NULL,
1306
                    itemnumber = ?
1320
                    itemnumber = ?
1307
            WHERE borrowernumber = ?
1321
            WHERE borrowernumber = ?
1308
              AND biblionumber = ?
1322
              AND biblionumber = ?
(-)a/admin/desks.pl (+127 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
#
3
# Copyright (C) 2011 Progilone
4
# Copyright (C) 2015 BULAC
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 2 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 with
18
# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
19
# Suite 330, Boston, MA  02111-1307 USA
20
21
use Modern::Perl;
22
use CGI;
23
use C4::Output;
24
use C4::Auth;
25
use C4::Context;
26
use C4::Koha;
27
use C4::Branch;
28
use C4::Desks;
29
30
my $script_name = "/cgi-bin/koha/admin/desks.pl";
31
32
my $input           = new CGI;
33
my $deskcode        = $input->param('deskcode');
34
my $branchcode      = $input->param('branchcode');
35
my $deskname        = $input->param('deskname');
36
my $deskdescription = $input->param('deskdescription');
37
my $op              = $input->param('op') || '';
38
39
my @deskloop;
40
my $branches = GetBranches;
41
my @branchloop;
42
foreach my $thisbranch (sort keys %$branches) {
43
    my %row =(value => $thisbranch,
44
	      branchname => $branches->{$thisbranch}->{branchname},
45
	);
46
    push @branchloop, \%row;
47
}
48
49
my ( $template, $borrowernumber, $cookie ) =
50
  get_template_and_user(
51
			{
52
			 template_name   => "admin/desks.tt",
53
			 query           => $input,
54
			 type            => "intranet",
55
			 authnotrequired => 0,
56
			 flagsrequired   => {
57
					     parameters => 'parameters_remaining_permissions'
58
					    },
59
			 debug           => 1,
60
			}
61
		       );
62
63
$template->param(branchloop => \@branchloop);
64
65
$template->param(script_name => $script_name);
66
if ($op) {
67
    $template->param($op  => 1);
68
} else {
69
    $template->param(else => 1);
70
}
71
$template->param(deskcode => $deskcode);
72
73
my $desk;
74
75
if ( $op eq 'add_form' || $op eq 'delete_confirm') {
76
    $desk = GetDesk($deskcode);
77
}
78
elsif ( $op eq 'add_validate' ) {
79
    $desk = {
80
	     'deskcode' => $deskcode,
81
	     'deskname'  => $deskname,
82
	     'deskdescription' => $deskdescription,
83
	     'branchcode' => $branchcode,
84
	    };
85
    if ( GetDesk($deskcode) ) {
86
	$template->param(error => 'ALREADY_EXISTS');
87
	print $input->redirect('desks.pl');
88
	exit;
89
    }
90
    if (AddDesk($desk) != 1) {
91
	$template->param(error => 'CANT_ADD');
92
    }
93
    print $input->redirect('desks.pl');
94
    exit;
95
}
96
elsif ( $op eq 'modify_validate' ) {
97
    $desk = {
98
	     'deskcode' => $deskcode,
99
	     'deskname'  => $deskname,
100
	     'deskdescription' => $deskdescription,
101
	     'branchcode' => $branchcode,
102
	    };
103
    if (ModDesk($desk) != 1) {
104
	$template->param(error => 'CANT_MODIFY');
105
    }
106
    print $input->redirect('desks.pl');
107
    exit;
108
}
109
elsif ( $op eq 'delete_confirmed' ) {
110
    if ( DelDesk($deskcode) != 1) {
111
	    $template->param(error => 'CANT_DELETE');
112
    }
113
    print $input->redirect('desks.pl');
114
    exit;
115
}
116
else {
117
    my $userenv = C4::Context->userenv;
118
    my $desksaref = GetDesks();
119
    foreach my $d (@$desksaref) {
120
	push @deskloop, GetDesk($d);
121
    }
122
     $template->param(deskloop  => \@deskloop);
123
}
124
125
$template->param(desk => $desk);
126
127
output_html_with_http_headers $input, $cookie, $template->output;
(-)a/circ/returns.pl (-1 / +2 lines)
Lines 158-164 if ( $query->param('resbarcode') ) { Link Here
158
        my $diffBranchSend = ($userenv_branch ne $diffBranchReturned) ? $diffBranchReturned : undef;
158
        my $diffBranchSend = ($userenv_branch ne $diffBranchReturned) ? $diffBranchReturned : undef;
159
        # diffBranchSend tells ModReserveAffect whether document is expected in this library or not,
159
        # diffBranchSend tells ModReserveAffect whether document is expected in this library or not,
160
        # i.e., whether to apply waiting status
160
        # i.e., whether to apply waiting status
161
        ModReserveAffect( $item, $borrowernumber, $diffBranchSend);
161
        my $deskcode = C4::Context->userenv->{"deskcode"} || undef;
162
        ModReserveAffect( $item, $borrowernumber, $diffBranchSend, $deskcode);
162
    }
163
    }
163
#   check if we have other reserves for this document, if we have a return send the message of transfer
164
#   check if we have other reserves for this document, if we have a return send the message of transfer
164
    my ( $messages, $nextreservinfo ) = GetOtherReserves($item);
165
    my ( $messages, $nextreservinfo ) = GetOtherReserves($item);
(-)a/circ/selectdesk.pl (+92 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
# This file is part of Koha.
4
#
5
# Koha is free software; you can redistribute it and/or modify it under the
6
# terms of the GNU General Public License as published by the Free Software
7
# Foundation; either version 2 of the License, or (at your option) any later
8
# version.
9
#
10
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
11
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License along
15
# with Koha; if not, write to the Free Software Foundation, Inc.,
16
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17
18
use Modern::Perl;
19
use CGI qw ( -utf8 );
20
21
use C4::Context;
22
use C4::Output;
23
use C4::Auth qw/:DEFAULT get_session/;
24
use C4::Koha;
25
use C4::Branch;
26
use C4::Desks;
27
28
my $query = CGI->new();
29
30
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
31
    {
32
        template_name   => "circ/selectdesk.tt",
33
        query           => $query,
34
        type            => "intranet",
35
        debug           => 1,
36
        authnotrequired => 0,
37
        flagsrequired   => { catalogue => 1, },
38
    }
39
);
40
41
my $sessionID = $query->cookie("CGISESSID");
42
my $session   = get_session($sessionID);
43
44
my $branch = $query->param('branch');
45
my $desks;
46
if ($branch) {
47
    $desks = GetDesks($branch);
48
}
49
else {
50
    $desks = GetDesks();
51
}
52
my $deskloop = [];
53
for my $desk (@$desks) {
54
    push @$deskloop, GetDesk($desk);
55
}
56
57
my $deskcode = $query->param('deskcode');
58
59
my $userenv_desk = C4::Context->userenv->{'desk'} || '';
60
my $updated = '';
61
62
if ($deskcode) {
63
    if ( !$userenv_desk or $userenv_desk ne $deskcode ) {
64
        my $desk = GetDesk($deskcode);
65
        $template->param( LoginDeskname => $desk->{'deskname'} );
66
        $template->param( LoginDeskcode => $desk->{'deskcode'} );
67
        $session->param( deskname => $desk->{'deskname'} );
68
        $session->param( deskcode => $desk->{'deskcode'} );
69
        $updated = 1;
70
    }
71
}
72
else {
73
    $deskcode = $userenv_desk;
74
}
75
76
$template->param( updated => \$updated );
77
78
unless ( $deskcode ~~ $desks ) {
79
    $deskcode = @$desks[0];
80
}
81
82
my $referer = $query->param('oldreferer') || $ENV{HTTP_REFERER};
83
if ($updated) {
84
    print $query->redirect( $referer || '/cgi-bin/koha/mainpage.pl' );
85
}
86
87
$template->param(
88
    referer  => $referer,
89
    deskloop => $deskloop,
90
);
91
92
output_html_with_http_headers $query, $cookie, $template->output;
(-)a/circ/waitingreserves.pl (+9 lines)
Lines 24-29 use CGI qw ( -utf8 ); Link Here
24
use C4::Context;
24
use C4::Context;
25
use C4::Output;
25
use C4::Output;
26
use C4::Branch; # GetBranchName
26
use C4::Branch; # GetBranchName
27
use C4::Desks;
27
use C4::Auth;
28
use C4::Auth;
28
use C4::Circulation;
29
use C4::Circulation;
29
use C4::Members;
30
use C4::Members;
Lines 92-109 foreach my $num (@getreserves) { Link Here
92
    my $itemnumber = $num->{'itemnumber'};
93
    my $itemnumber = $num->{'itemnumber'};
93
    my $gettitle     = GetBiblioFromItemNumber( $itemnumber );
94
    my $gettitle     = GetBiblioFromItemNumber( $itemnumber );
94
    my $borrowernum = $num->{'borrowernumber'};
95
    my $borrowernum = $num->{'borrowernumber'};
96
    my $deskcode = $num->{'deskcode'};
97
    my $desk = GetDesk($deskcode);
98
    my $deskname;
99
    if ($desk) {
100
        $deskname = $desk->{'deskname'};
101
    }
95
    my $holdingbranch = $gettitle->{'holdingbranch'};
102
    my $holdingbranch = $gettitle->{'holdingbranch'};
96
    my $homebranch = $gettitle->{'homebranch'};
103
    my $homebranch = $gettitle->{'homebranch'};
97
104
98
    my %getreserv = (
105
    my %getreserv = (
99
        itemnumber => $itemnumber,
106
        itemnumber => $itemnumber,
100
        borrowernum => $borrowernum,
107
        borrowernum => $borrowernum,
108
        deskname => $deskname,
101
    );
109
    );
102
110
103
    # fix up item type for display
111
    # fix up item type for display
104
    $gettitle->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $gettitle->{'itype'} : $gettitle->{'itemtype'};
112
    $gettitle->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $gettitle->{'itype'} : $gettitle->{'itemtype'};
105
    my $getborrower = GetMember(borrowernumber => $num->{'borrowernumber'});
113
    my $getborrower = GetMember(borrowernumber => $num->{'borrowernumber'});
106
    my $itemtypeinfo = getitemtypeinfo( $gettitle->{'itemtype'} );  # using the fixed up itype/itemtype
114
    my $itemtypeinfo = getitemtypeinfo( $gettitle->{'itemtype'} );  # using the fixed up itype/itemtype
115
107
    $getreserv{'waitingdate'} = $num->{'waitingdate'};
116
    $getreserv{'waitingdate'} = $num->{'waitingdate'};
108
    my ( $waiting_year, $waiting_month, $waiting_day ) = split (/-/, $num->{'waitingdate'});
117
    my ( $waiting_year, $waiting_month, $waiting_day ) = split (/-/, $num->{'waitingdate'});
109
    ( $waiting_year, $waiting_month, $waiting_day ) =
118
    ( $waiting_year, $waiting_month, $waiting_day ) =
(-)a/installer/data/mysql/atomicupdate/bug_13881-add_desk_management.sql (+12 lines)
Line 0 Link Here
1
DROP TABLE IF EXISTS desks;
2
CREATE TABLE desks (
3
  deskcode varchar(10) NOT NULL,         -- desk id
4
  branchcode varchar(10) NOT NULL,       -- branch id the desk is attached to
5
  deskname varchar(80) NOT NULL,         -- name used for OPAC or intranet printing
6
  deskdescription varchar(300) NOT NULL, -- longer description of the desk
7
  PRIMARY KEY (deskcode),
8
  FOREIGN KEY (branchcode)
9
    REFERENCES branches(branchcode)
10
      ON DELETE CASCADE
11
      ON UPDATE CASCADE
12
) ENGINE=InnoDB CHARSET=utf8 COLLATE=utf8_unicode_ci;
(-)a/installer/data/mysql/atomicupdate/bug_13881_link_desk_to_reserves.sql (+8 lines)
Line 0 Link Here
1
ALTER TABLE reserves     ADD COLUMN deskcode VARCHAR(10) DEFAULT NULL AFTER branchcode,
2
                         ADD KEY deskcode (deskcode),
3
                         ADD FOREIGN KEY (deskcode) REFERENCES desks (deskcode)
4
                           ON DELETE SET NULL ON UPDATE SET NULL;
5
ALTER TABLE old_reserves ADD COLUMN deskcode VARCHAR(10) DEFAULT NULL AFTER branchcode,
6
                         ADD KEY deskcode (deskcode),
7
                         ADD FOREIGN KEY (deskcode) REFERENCES desks (deskcode)
8
                           ON DELETE SET NULL ON UPDATE SET NULL;
(-)a/installer/data/mysql/kohastructure.sql (-3 / +23 lines)
Lines 455-461 CREATE TABLE `branchtransfers` ( -- information for items that are in transit be Link Here
455
  CONSTRAINT `branchtransfers_ibfk_3` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE
455
  CONSTRAINT `branchtransfers_ibfk_3` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE
456
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
456
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
457
457
458
459
--
458
--
460
-- Table structure for table `browser`
459
-- Table structure for table `browser`
461
--
460
--
Lines 962-967 CREATE TABLE `deleteditems` ( Link Here
962
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
961
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
963
962
964
--
963
--
964
-- Table structure for table `desks`
965
--
966
967
DROP TABLE IF EXISTS `desks`;
968
CREATE TABLE `desks` (
969
  `deskcode` varchar(10) NOT NULL,         -- desk id
970
  `branchcode` varchar(10) NOT NULL,       -- branch id the desk is attached to
971
  `deskname` varchar(80) NOT NULL,         -- name used for OPAC or intranet printing
972
  `deskdescription` varchar(300) NOT NULL, -- longer description of the desk
973
  PRIMARY KEY (`deskcode`),
974
  KEY `fk_desks_branchcode` (`branchcode`),
975
  CONSTRAINT `fk_desks_branchcode` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
976
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
977
978
--
965
-- Table structure for table `ethnicity`
979
-- Table structure for table `ethnicity`
966
--
980
--
967
981
Lines 1655-1660 CREATE TABLE `old_reserves` ( -- this table holds all holds/reserves that have b Link Here
1655
  `reservedate` date default NULL, -- the date the hold was places
1669
  `reservedate` date default NULL, -- the date the hold was places
1656
  `biblionumber` int(11) default NULL, -- foreign key from the biblio table defining which bib record this hold is on
1670
  `biblionumber` int(11) default NULL, -- foreign key from the biblio table defining which bib record this hold is on
1657
  `branchcode` varchar(10) default NULL, -- foreign key from the branches table defining which branch the patron wishes to pick this hold up at
1671
  `branchcode` varchar(10) default NULL, -- foreign key from the branches table defining which branch the patron wishes to pick this hold up at
1672
  `deskcode` varchar(10) default NULL, -- foreign key from the desks table defining which desk the patron may pick this hold up from
1658
  `notificationdate` date default NULL, -- currently unused
1673
  `notificationdate` date default NULL, -- currently unused
1659
  `reminderdate` date default NULL, -- currently unused
1674
  `reminderdate` date default NULL, -- currently unused
1660
  `cancellationdate` date default NULL, -- the date this hold was cancelled
1675
  `cancellationdate` date default NULL, -- the date this hold was cancelled
Lines 1673-1684 CREATE TABLE `old_reserves` ( -- this table holds all holds/reserves that have b Link Here
1673
  KEY `old_reserves_biblionumber` (`biblionumber`),
1688
  KEY `old_reserves_biblionumber` (`biblionumber`),
1674
  KEY `old_reserves_itemnumber` (`itemnumber`),
1689
  KEY `old_reserves_itemnumber` (`itemnumber`),
1675
  KEY `old_reserves_branchcode` (`branchcode`),
1690
  KEY `old_reserves_branchcode` (`branchcode`),
1691
  KEY `old_reserves_deskcode` (`deskcode`),
1676
  CONSTRAINT `old_reserves_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1692
  CONSTRAINT `old_reserves_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`)
1677
    ON DELETE SET NULL ON UPDATE SET NULL,
1693
    ON DELETE SET NULL ON UPDATE SET NULL,
1678
  CONSTRAINT `old_reserves_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`)
1694
  CONSTRAINT `old_reserves_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`)
1679
    ON DELETE SET NULL ON UPDATE SET NULL,
1695
    ON DELETE SET NULL ON UPDATE SET NULL,
1680
  CONSTRAINT `old_reserves_ibfk_3` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`)
1696
  CONSTRAINT `old_reserves_ibfk_3` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`)
1681
    ON DELETE SET NULL ON UPDATE SET NULL
1697
    ON DELETE SET NULL ON UPDATE SET NULL,
1698
  CONSTRAINT `old_reserves_ibfk_4` FOREIGN KEY (`deskcode`) REFERENCES `desks` (`deskcode`) ON DELETE SET NULL ON UPDATE SET NULL
1682
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
1699
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
1683
1700
1684
--
1701
--
Lines 1828-1833 CREATE TABLE `reserves` ( -- information related to holds/reserves in Koha Link Here
1828
  `reservedate` date default NULL, -- the date the hold was places
1845
  `reservedate` date default NULL, -- the date the hold was places
1829
  `biblionumber` int(11) NOT NULL default 0, -- foreign key from the biblio table defining which bib record this hold is on
1846
  `biblionumber` int(11) NOT NULL default 0, -- foreign key from the biblio table defining which bib record this hold is on
1830
  `branchcode` varchar(10) default NULL, -- foreign key from the branches table defining which branch the patron wishes to pick this hold up at
1847
  `branchcode` varchar(10) default NULL, -- foreign key from the branches table defining which branch the patron wishes to pick this hold up at
1848
  `deskcode` varchar(10) default NULL, -- foreign key from the desks table defining which desk the patron may pick this hold up from
1831
  `notificationdate` date default NULL, -- currently unused
1849
  `notificationdate` date default NULL, -- currently unused
1832
  `reminderdate` date default NULL, -- currently unused
1850
  `reminderdate` date default NULL, -- currently unused
1833
  `cancellationdate` date default NULL, -- the date this hold was cancelled
1851
  `cancellationdate` date default NULL, -- the date this hold was cancelled
Lines 1847-1856 CREATE TABLE `reserves` ( -- information related to holds/reserves in Koha Link Here
1847
  KEY `biblionumber` (`biblionumber`),
1865
  KEY `biblionumber` (`biblionumber`),
1848
  KEY `itemnumber` (`itemnumber`),
1866
  KEY `itemnumber` (`itemnumber`),
1849
  KEY `branchcode` (`branchcode`),
1867
  KEY `branchcode` (`branchcode`),
1868
  KEY `deskcode` (`deskcode`),
1850
  CONSTRAINT `reserves_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1869
  CONSTRAINT `reserves_ibfk_1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1851
  CONSTRAINT `reserves_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1870
  CONSTRAINT `reserves_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1852
  CONSTRAINT `reserves_ibfk_3` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1871
  CONSTRAINT `reserves_ibfk_3` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1853
  CONSTRAINT `reserves_ibfk_4` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
1872
  CONSTRAINT `reserves_ibfk_4` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE,
1873
  CONSTRAINT `reserves_ibfk_5` FOREIGN KEY (`deskcode`) REFERENCES `desks` (`deskcode`) ON DELETE SET NULL ON UPDATE SET NULL
1854
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
1874
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
1855
1875
1856
--
1876
--
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc (+15 lines)
Lines 44-49 Link Here
44
            <li class="dropdown">
44
            <li class="dropdown">
45
                <a href="#" id="drop3" role="button" class="dropdown-toggle" data-toggle="dropdown">
45
                <a href="#" id="drop3" role="button" class="dropdown-toggle" data-toggle="dropdown">
46
                    <span class="loggedinusername">[% loggedinusername %]</span>
46
                    <span class="loggedinusername">[% loggedinusername %]</span>
47
                    [% IF ( LoginDeskcode ) %]
48
                    <span class="separator">|</span>
49
                    <strong>
50
		      <span id="logged-in-desk-name">[% LoginDeskname %]</span>
51
                      <span id="logged-in-desk-code" class="content_hidden">[% LoginDeskcode %]</span>
52
                    </strong>
53
                    [% ELSIF (HasDesk) %]
54
                    <span class="separator">|</span>
55
                    <strong>
56
                      <span id="logged-in-desk-name">NO DESK SET</span>
57
                    </strong>
58
                    [% END %]
47
                    <span class="separator">|</span>
59
                    <span class="separator">|</span>
48
                    [% IF ( AutoLocation ) %]
60
                    [% IF ( AutoLocation ) %]
49
                    <brand>
61
                    <brand>
Lines 73-78 Link Here
73
                        <a class="toplinks" href="/cgi-bin/koha/circ/selectbranchprinter.pl">Set library</a>
85
                        <a class="toplinks" href="/cgi-bin/koha/circ/selectbranchprinter.pl">Set library</a>
74
                    </li>
86
                    </li>
75
                    [% END %]
87
                    [% END %]
88
                    <li>
89
                        <a class="toplinks" href="/cgi-bin/koha/circ/selectdesk.pl">Set desk</a>
90
                    </li>
76
                    [% IF EnableSearchHistory %]
91
                    [% IF EnableSearchHistory %]
77
                    <li>
92
                    <li>
78
                        <a class="toplinks" href="/cgi-bin/koha/catalogue/search-history.pl">Search history</a>
93
                        <a class="toplinks" href="/cgi-bin/koha/catalogue/search-history.pl">Search history</a>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt (+2 lines)
Lines 32-37 Link Here
32
<dl>
32
<dl>
33
        <dt><a href="/cgi-bin/koha/admin/branches.pl">Libraries and groups</a></dt>
33
        <dt><a href="/cgi-bin/koha/admin/branches.pl">Libraries and groups</a></dt>
34
        <dd>Define libraries and groups.</dd>
34
        <dd>Define libraries and groups.</dd>
35
	<dt><a href="/cgi-bin/koha/admin/desks.pl">Desks</a></dt>
36
	<dd>Define Desks.</dd>
35
        <dt><a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a></dt>
37
        <dt><a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a></dt>
36
        <dd>Define item types used for circulation rules.</dd>
38
        <dd>Define item types used for circulation rules.</dd>
37
        <dt><a href="/cgi-bin/koha/admin/authorised_values.pl">Authorized values</a></dt>
39
        <dt><a href="/cgi-bin/koha/admin/authorised_values.pl">Authorized values</a></dt>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/desks.tt (+221 lines)
Line 0 Link Here
1
[% USE AuthorisedValues %]
2
[% USE Branches %]
3
[% INCLUDE 'doc-head-open.inc' %]
4
<title>Koha &rsaquo; Administration &rsaquo; Desks [% IF ( add_form ) %]&rsaquo;
5
  [% IF ( deskcode ) %]
6
Modify desk '[% deskcode %]'
7
  [% ELSE %]
8
Add desk
9
  [% END %]
10
[% END %]
11
[% IF ( delete_confirm ) %]&rsaquo;
12
  Delete desk '[% deskcode %]'?
13
[% END %]
14
[% IF ( delete_confirmed ) %]&rsaquo;
15
Desk deleted
16
[% END %]
17
</title>
18
[% INCLUDE 'doc-head-close.inc' %]
19
<link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" />
20
[% INCLUDE 'datatables.inc' %]
21
<script type="text/javascript">
22
//<![CDATA[
23
  $(document).ready(function() {
24
    $('#icons').tabs();
25
    $("#table_desks").dataTable($.extend(true, {}, dataTablesDefaults, {
26
      "aoColumnDefs":
27
         [{ "aTargets": [ -1 ], "bSortable": false, "bSearchable": false },],
28
         "aaSorting": [[ 2, "asc" ]],
29
         "iDisplayLength": 10,
30
         "sPaginationType": "four_button"
31
      }));
32
      $( "#deskcodeentry" ).validate({
33
        rules: {
34
          deskcode: { required: true },
35
          description: { required: true },
36
          rentalcharge: { number: true }
37
        }
38
    });
39
  });
40
//]]>
41
</script>
42
<style type="text/css">
43
  fieldset.rows div.toptabs li { clear:none;margin-right:.5em;padding-bottom:0;width:auto; }
44
  fieldset.rows div.toptabs .ui-tabs-nav li.ui-tabs-active {background-color : #F4F8F9; }
45
  fieldset.rows .ui-tabs-panel { margin-right : 10px; margin-left : 10px;margin-bottom:10px;}
46
  fieldset.rows .ui-tabs-nav { margin-left : 10px; }
47
</style>
48
</head>
49
<body id="admin_desks" class="admin">
50
[% INCLUDE 'header.inc' %]
51
[% INCLUDE 'cat-search.inc' %]
52
53
<div id="breadcrumbs">
54
<a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> &rsaquo;
55
[% IF ( add_form ) %]
56
  [% IF ( desk.deskcode ) %]
57
<a href="/cgi-bin/koha/admin/desks.pl">Desks</a> &rsaquo; Modify desk '[% desk.deskcode %]'
58
  [% ELSE %]
59
<a href="/cgi-bin/koha/admin/desks.pl">Desks</a> &rsaquo; Add desk
60
  [% END %]
61
[% END %]
62
[% IF ( delete_confirm ) %]
63
<a href="/cgi-bin/koha/admin/desks.pl">Desks</a> &rsaquo; Delete desk '[% deskcode %]'?
64
[% END %]
65
[% IF ( else ) %]
66
Desks administration
67
[% END %]</div>
68
69
<div id="doc3" class="yui-t2">
70
  <div id="bd">
71
    <div id="yui-main">
72
      <div class="yui-b">
73
      [% IF ( error ) %]$
74
        <div class="dialog alert">
75
          [% IF ( CANT_ADD ) %]
76
          <h3>Adding Desk [% deskcode %] failed</h3>
77
          [% END %]
78
          [% IF ( ALREADY_EXISTS ) %]
79
          <h3>Adding Desk [% deskcode %] failed, it already exists</h3>
80
          [% END %]
81
          [% IF ( CANT_MODIFY ) %]
82
          <h3>Modifying Desk [% deskcode %] failed</h3>
83
          [% IF ( CANT_DELETE ) %]
84
          <h3>Deleting Desk [% deskcode %] failed</h3>
85
          [% END %]
86
      [% END %]
87
</div>
88
[% END %]
89
[% IF ( else ) %]
90
        <div id="toolbar" class="btn-toolbar">
91
          <a class="btn btn-small" id="newdesk" href="/cgi-bin/koha/admin/desks.pl?op=add_form"><i class="icon-plus"></i> New Desk</a>
92
        </div>
93
[% END %]
94
95
96
[% IF ( add_form ) %]
97
  [% IF ( deskcode ) %]
98
      <h3>Modify desk</h3>
99
  [% ELSE %]
100
      <h3>Add desk</h3>
101
  [% END %]
102
      <form action="[% script_name %]" name="Aform" method="post" id="deskcodeentry">
103
        <input type="hidden" name="op" value=
104
	[% IF ( deskcode ) %]
105
	  "modify_validate"
106
	[% ELSE %]
107
          "add_validate"
108
	[% END %]
109
           />
110
        <input type="hidden" name="checked" value="0" />
111
        <fieldset class="rows">
112
        <ol>
113
  [% IF ( desk.deskcode ) %]
114
          <li>
115
            <span class="label">Desk code: </span>
116
	    <input type="hidden" name="deskcode" value="[% desk.deskcode %]" />
117
            [% desk.deskcode %]
118
          </li>
119
  [% ELSE %]
120
          <li>
121
            <label for="deskcode" class="required">Desk code: </label>
122
	    <input type="text" id="deskcode" name="deskcode" size="10" maxlength="10" onblur="toUC(this)" required="required" />
123
	    <span class="required">Required</span>
124
          </li>
125
  [% END %]
126
          <li>
127
            <label for="deskdescription" class="required">Name: </label>
128
	    <input type="text" id="deskname" name="deskname" size="48" value="[% desk.deskname |html %]" required="required" />
129
	    <span class="required">Required</span>
130
	  </li>
131
          <li>
132
            <label for="deskdescription" class="required">Description: </label>
133
            <input type="text" id="deskdescription" name="deskdescription" size="48" value="[% desk.deskdescription |html %]" required="required" />
134
	    <span class="required">Required</span></li>
135
          <li>
136
	    <label for="branchcode" class="required">Branch: </label>
137
            <select id="branchcode" name="branchcode" required="required">
138
              <option value=""></option>
139
              [% FOREACH branchloo IN branchloop %]
140
                [% IF (Branches.GetLoggedInBranchcode == branchloo.value) %]
141
                <option value="[% branchloo.value %]" selected="selected">[% branchloo.branchname %]</option>
142
                [% ELSE %]
143
                <option value="[% branchloo.value %]">[% branchloo.branchname %]</option>
144
loop            [% END %]
145
              [% END %]
146
            </select>
147
          </li>
148
        </ol>
149
        </fieldset>
150
        <fieldset class="action">
151
          <input type="submit" value="Save changes" />
152
          <a href="/cgi-bin/koha/admin/desks.pl" class="cancel">Cancel</a>
153
        </fieldset>
154
      </form>
155
      <br class="clear" />
156
[% END %]
157
158
159
[% IF ( delete_confirm ) %]
160
      <div class="dialog alert">
161
        <h3>Delete Desk '[% desk.deskcode %]'?</h3>
162
	<form action="[% script_name %]" method="post">
163
	  <input type='hidden' name='op' value='delete_confirmed'/>
164
          <table>
165
            <tr>
166
              <th scope="row">Desk</th>
167
              <td><input type='hidden' name='deskcode' value='[% desk.deskcode %]'/>[% desk.deskcode %]</td>
168
            </tr>
169
	    <tr><th scope="row">Name</th><td>[% desk.deskname %]</td></tr>
170
	    <tr><th scope="row">Description</th><td>[% desk.deskdescription %]</td></tr>
171
	    <tr><th scope="row">Branch</th><td>[% desk.branchcode %]</td></tr>
172
          </table>
173
	  <input type="submit" class="approve" value="Delete this Desk" />
174
	</form>
175
	<form action="[% script_name %]" method="post">
176
	  <input type="submit" class="deny" value="Do Not Delete" />
177
	</form>
178
      </div>
179
[% END %]
180
181
182
[% IF ( else ) %]
183
      <h2>Desks administration</h2>
184
  [% IF ( deskloop ) %]
185
      <table id="table_desks">
186
        <thead>
187
          <th>Desk code</th>
188
          <th>Name</th>
189
          <th>Description</th>
190
          <th>Branchcode</th>
191
          <th>Action</th>
192
        </thead>
193
    [% FOREACH deskloo IN deskloop %]
194
        <tr>
195
          <td>
196
            <a href="[% deskloo.script_name %]?op=add_form&amp;deskcode=[% loo.deskcode |html %]">
197
            [% deskloo.deskcode %]
198
            </a>
199
          </td>
200
          <td>[% deskloo.deskname %]</td>
201
          <td>[% deskloo.deskdescription %]</td>
202
          <td>[% deskloo.branchcode %]</td>
203
          <td>
204
            <a href="[% deskloo.script_name %]?op=add_form&amp;deskcode=[% deskloo.deskcode |html %]">Edit</a>
205
            <a href="[% deskloo.script_name %]?op=delete_confirm&amp;deskcode=[% deskloo.deskcode |html %]">Delete</a>
206
          </td>
207
        </tr>
208
    [% END %]
209
      </table>
210
  [% ELSE %]
211
      <div class="dialog message">There are no desk defined</div>
212
  [% END %]
213
      <div class="pages">[% pagination_bar %]</div>
214
[% END %]
215
    </div>
216
  </div>
217
  <div class="yui-b">
218
[% INCLUDE 'admin-menu.inc' %]
219
  </div>
220
</div>
221
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/selectdesk.tt (+50 lines)
Line 0 Link Here
1
[% INCLUDE 'doc-head-open.inc' %]
2
<title>Koha &rsaquo; Circulation &rsaquo; Set library</title>
3
[% INCLUDE 'doc-head-close.inc' %]
4
<style type="text/css">
5
    .noshow {display: none;}
6
</style>
7
</head>
8
<body id="circ_selectdesk" class="circ">
9
[% INCLUDE 'header.inc' %]
10
[% INCLUDE 'circ-search.inc' %]
11
12
<div id="breadcrumbs">
13
         <a href="/cgi-bin/koha/mainpage.pl">Home</a>
14
&rsaquo; <a href="/cgi-bin/koha/circ/circulation-home.pl">Circulation</a>
15
&rsaquo; <a href="/cgi-bin/koha/circ/selectdesk.pl">Set library</a>
16
</div>
17
18
<div id="doc" class="yui-t7">
19
  <div id="bd">
20
    <div id="yui-main">
21
      <div class="yui-b">
22
        <form method="post" action="selectdesk.pl">
23
          <fieldset class="rows">
24
            <legend>Set desk</legend>
25
              <ol>
26
                <li><label for="desk">Choose desk:</label>
27
                  <select name="deskcode" id="deskcode">
28
                    [% FOREACH deskloo IN deskloop %]
29
                      [% IF ( deskloo.selected ) %]
30
                        <option value="[% deskloo.deskcode %]" selected="selected">[% deskloo %]</option>
31
                      [% ELSE %]
32
                        <option value="[% deskloo.deskcode %]">[% deskloo.deskname %]</option>
33
                      [% END %]
34
                    [% END %]
35
                  </select>
36
	        </li>
37
              </ol>
38
            </fieldset>
39
            <fieldset class="action">
40
              <input type="submit" value="Submit" />
41
              <a class="cancel" id="cancel_set_desk" href="[% referer or '/cgi-bin/koha/circ/circulation.pl' %]">Cancel</a>
42
            </fieldset>
43
            <div class="noshow">
44
              <input type="hidden" name="oldreferer" value="[% referer or "/cgi-bin/koha/mainpage.pl" |html %]" />
45
            </div>
46
          </form>
47
        </div>
48
      </div>
49
    </div>
50
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tt (+6 lines)
Lines 82-87 Link Here
82
                    <th class="anti-the">Title</th>
82
                    <th class="anti-the">Title</th>
83
                    <th>Patron</th>
83
                    <th>Patron</th>
84
                    <th>Location</th>
84
                    <th>Location</th>
85
		    [% IF HasDesk %]
86
                    <th>Desk</th>
87
		    [% END %]
85
                    <th>Copy number</th>
88
                    <th>Copy number</th>
86
                    <th>Enumeration</th>
89
                    <th>Enumeration</th>
87
                    <th>Action</th>
90
                    <th>Action</th>
Lines 101-106 Link Here
101
                        [% reserveloo.borrowermail %]</a>[% END %]
104
                        [% reserveloo.borrowermail %]</a>[% END %]
102
                    </td>
105
                    </td>
103
                    <td>[% Branches.GetName( reserveloo.homebranch ) %]<br />[% reserveloo.itemcallnumber %]</td>
106
                    <td>[% Branches.GetName( reserveloo.homebranch ) %]<br />[% reserveloo.itemcallnumber %]</td>
107
		    [% IF HasDesk %]
108
                    <td>[% reserveloo.deskname %]</td>
109
		    [% END %]
104
                    <td>[% reserveloo.copynumber %]</td>
110
                    <td>[% reserveloo.copynumber %]</td>
105
                    <td>[% reserveloo.enumchron %]</td>
111
                    <td>[% reserveloo.enumchron %]</td>
106
                    <td>
112
                    <td>
(-)a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt (-1 / +1 lines)
Lines 566-572 Link Here
566
                                                [% IF ( RESERVE.wait ) %]
566
                                                [% IF ( RESERVE.wait ) %]
567
                                                    [% IF ( RESERVE.atdestination ) %]
567
                                                    [% IF ( RESERVE.atdestination ) %]
568
                                                        [% IF ( RESERVE.found ) %]
568
                                                        [% IF ( RESERVE.found ) %]
569
                                                            Item waiting at <b> [% RESERVE.wbrname %]</b>[% IF ( RESERVE.waitingdate ) %] since [% RESERVE.waitingdate | $KohaDates %][% END %]
569
                                                            Item waiting at <b> [% RESERVE.wbrname %]</b>[% IF (RESERVE.wdkname) %], [% RESERVE.wdkname %][% END %][% IF ( RESERVE.waitingdate ) %], since [% RESERVE.waitingdate | $KohaDates %][% END %]
570
                                                            <input type="hidden" name="pickup" value="[% RESERVE.wbrcd %]" />
570
                                                            <input type="hidden" name="pickup" value="[% RESERVE.wbrcd %]" />
571
                                                        [% ELSE %]
571
                                                        [% ELSE %]
572
                                                            Item waiting to be pulled from <b> [% RESERVE.wbrname %]</b>
572
                                                            Item waiting to be pulled from <b> [% RESERVE.wbrname %]</b>
(-)a/opac/opac-user.pl (+7 lines)
Lines 34-39 use C4::Biblio; Link Here
34
use C4::Items;
34
use C4::Items;
35
use C4::Letters;
35
use C4::Letters;
36
use C4::Branch; # GetBranches
36
use C4::Branch; # GetBranches
37
use C4::Desks;
37
use Koha::DateUtils;
38
use Koha::DateUtils;
38
use Koha::Borrower::Debarments qw(IsDebarred);
39
use Koha::Borrower::Debarments qw(IsDebarred);
39
40
Lines 326-331 foreach my $res (@reserves) { Link Here
326
            $res->{'wbrcode'} = $res->{'branchcode'};
327
            $res->{'wbrcode'} = $res->{'branchcode'};
327
            $res->{'itemnumber'}    = $res->{'itemnumber'};
328
            $res->{'itemnumber'}    = $res->{'itemnumber'};
328
            $res->{'wbrname'} = $branches->{$res->{'branchcode'}}->{'branchname'};
329
            $res->{'wbrname'} = $branches->{$res->{'branchcode'}}->{'branchname'};
330
            if ($res->{'deskcode'}) {
331
                my $desk = GetDesk($res->{'deskcode'});
332
                if ($desk) {
333
                    $res->{'wdkname'} = $desk->{'deskname'};
334
                }
335
            }
329
            if($res->{'holdingbranch'} eq $res->{'wbrcode'}){
336
            if($res->{'holdingbranch'} eq $res->{'wbrcode'}){
330
                $res->{'atdestination'} = 1;
337
                $res->{'atdestination'} = 1;
331
            }
338
            }
(-)a/t/db_dependent/Desks.t (-1 / +70 lines)
Line 0 Link Here
0
- 
1
#!/usr/bin/perl
2
#
3
# Copyright (C) 2015 BULAC
4
#
5
# Koha is free software; you can redistribute it and/or modify it
6
# under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 3 of the License, or
8
# (at your option) any later version.
9
#
10
# Koha is distributed in the hope that it will be useful, but
11
# WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
# GNU General Public License for more details.
14
#
15
# You should have received a copy of the GNU General Public License
16
# along with Koha; if not, see <http://www.gnu.org/licenses>.
17
18
use Modern::Perl;
19
20
use Test::More tests => 17;
21
22
BEGIN {
23
    use_ok('C4::Branch');
24
    use_ok('C4::Desks');
25
}
26
27
my $deskcode = 'MON BUREAU';
28
my $deskname = 'mon bureau';
29
my $deskdescription = "Le beau bureau ici.";
30
my $branchcode = shift [keys GetBranches];
31
32
my $hrdesk = {
33
	      'deskcode'        => $deskcode,
34
	      'deskname'        => $deskname,
35
	      'deskdescription' => $deskdescription,
36
	      'branchcode'      => $branchcode
37
	     };
38
39
ok(AddDesk($hrdesk) == 1, 'AddDesk creates desk.');
40
ok(! defined AddDesk($hrdesk)
41
   , 'AddDesk returns undef when desk already exists');
42
43
my $desk = GetDesk($deskcode);
44
ok (ref($desk) eq 'HASH', 'GetDesk returns hashref.');
45
ok($desk->{'deskcode'} eq $deskcode, 'GetDesk returns desk code');
46
ok($desk->{'deskname'} eq $deskname, 'GetDesk returns desk name');
47
ok($desk->{'deskdescription'} eq $deskdescription, 'GetDesk returns desk description');
48
ok($desk->{'branchcode'} eq $branchcode, 'GetDesk returns branchcode');
49
ok(! defined GetDesk('this desk surely not exists'),
50
   "GetDesk returns undef when desk doesn't exist");
51
52
my $modifieddesk = {
53
		    'deskcode'        => $deskcode,
54
		    'deskname'        => 'mon joli bureau',
55
		    'deskdescription' => "Celui dans l'entrée",
56
		    'branchcode'      => $branchcode
57
		   };
58
ok(ModDesk($modifieddesk) == 1, 'ModDesk modifies Desk');
59
$modifieddesk->{'deskcode'} = 'this desk surely not exists';
60
ok(ModDesk($modifieddesk) == 0, 'ModDesk returns 0 when deskcode is wrong');
61
62
my $desks = GetDesks();
63
ok(ref($desks) eq 'ARRAY', 'GetDesks returns an array');
64
ok(grep($deskcode, @$desks), 'GetDesks returns desk codes');
65
my $emptydesksset = GetDesks("this branch sureley doesn't exist");
66
ok(! @$emptydesksset , 'GetDesks returns [] when no desks are found');
67
68
ok(DelDesk($deskcode) == 1, 'DelDesk returns 1 when successfuly deleting desk');
69
ok(DelDesk('this desk surely not exists'),
70
   "DelDesk returns 0 when no desk were deleted");

Return to bug 13881