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

(-)a/C4/Acquisition.pm (-1 / +72 lines)
Lines 57-63 BEGIN { Link Here
57
        &GetOrderNumber &GetLateOrders &GetOrderFromItemnumber
57
        &GetOrderNumber &GetLateOrders &GetOrderFromItemnumber
58
        &SearchOrder &GetHistory &GetRecentAcqui
58
        &SearchOrder &GetHistory &GetRecentAcqui
59
        &ModReceiveOrder &CancelReceipt &ModOrderBiblioitemNumber
59
        &ModReceiveOrder &CancelReceipt &ModOrderBiblioitemNumber
60
        &GetCancelledOrders
60
        &GetCancelledOrders &TransferOrder
61
61
62
        &NewOrderItem &ModOrderItem &ModItemOrder
62
        &NewOrderItem &ModOrderItem &ModItemOrder
63
63
Lines 1558-1563 sub DelOrder { Link Here
1558
    
1558
    
1559
}
1559
}
1560
1560
1561
=head3 TransferOrder
1562
1563
    my $newordernumber = TransferOrder($ordernumber, $basketno);
1564
1565
Transfer an order line to a basket.
1566
Mark $ordernumber as cancelled with an internal note 'Cancelled and transfered
1567
to BOOKSELLER on DATE' and create new order with internal note
1568
'Transfered from BOOKSELLER on DATE'.
1569
Move all attached items to the new order.
1570
Received orders cannot be transfered.
1571
Return the ordernumber of created order.
1572
1573
=cut
1574
1575
sub TransferOrder {
1576
    my ($ordernumber, $basketno) = @_;
1577
1578
    return unless $ordernumber or $basketno;
1579
1580
    my $order = GetOrder( $ordernumber );
1581
    return if $order->{datereceived};
1582
1583
    my $today = C4::Dates->new()->output("iso");
1584
    my $query = qq{
1585
        SELECT aqbooksellers.name
1586
        FROM aqorders
1587
            LEFT JOIN aqbasket ON aqorders.basketno = aqbasket.basketno
1588
            LEFT JOIN aqbooksellers ON aqbasket.booksellerid = aqbooksellers.id
1589
        WHERE aqorders.ordernumber = ?
1590
    };
1591
    my $dbh = C4::Context->dbh;
1592
    my $sth = $dbh->prepare($query);
1593
    $sth->execute($ordernumber);
1594
    my ($booksellerfromname) = $sth->fetchrow_array;
1595
1596
    $query = qq{
1597
        SELECT aqbooksellers.name
1598
        FROM aqbasket
1599
            LEFT JOIN aqbooksellers ON aqbasket.booksellerid = aqbooksellers.id
1600
        WHERE aqbasket.basketno = ?
1601
    };
1602
    $sth = $dbh->prepare($query);
1603
    $sth->execute($basketno);
1604
    my ($booksellertoname) = $sth->fetchrow_array;
1605
1606
    $query = qq{
1607
        UPDATE aqorders
1608
        SET datecancellationprinted = CAST(NOW() AS date),
1609
            internalnotes = ?
1610
        WHERE ordernumber = ?
1611
    };
1612
    $sth = $dbh->prepare($query);
1613
    $sth->execute("Cancelled and transfered to $booksellertoname on $today", $ordernumber);
1614
1615
    delete $order->{'ordernumber'};
1616
    $order->{'basketno'} = $basketno;
1617
    $order->{'internalnotes'} = "Transfered from $booksellerfromname on $today";
1618
    my $newordernumber;
1619
    (undef, $newordernumber) = NewOrder($order);
1620
1621
    $query = qq{
1622
        UPDATE aqorders_items
1623
        SET ordernumber = ?
1624
        WHERE ordernumber = ?
1625
    };
1626
    $sth = $dbh->prepare($query);
1627
    $sth->execute($newordernumber, $ordernumber);
1628
1629
    return $newordernumber;
1630
}
1631
1561
=head2 FUNCTIONS ABOUT PARCELS
1632
=head2 FUNCTIONS ABOUT PARCELS
1562
1633
1563
=cut
1634
=cut
(-)a/acqui/transferorder.pl (+145 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
# Script to move an order from a bookseller to another
4
5
# Copyright 2011 BibLibre SARL
6
#
7
# This file is part of Koha.
8
#
9
# Koha is free software; you can redistribute it and/or modify it under the
10
# terms of the GNU General Public License as published by the Free Software
11
# Foundation; either version 2 of the License, or (at your option) any later
12
# version.
13
#
14
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
15
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
16
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
17
#
18
# You should have received a copy of the GNU General Public License along
19
# with Koha; if not, write to the Free Software Foundation, Inc.,
20
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21
22
use Modern::Perl;
23
use CGI;
24
25
use C4::Auth;
26
use C4::Output;
27
use C4::Context;
28
use C4::Acquisition;
29
use C4::Bookseller qw/GetBookSellerFromId GetBookSeller/;
30
use C4::Members;
31
use C4::Dates qw/format_date_in_iso/;
32
use Date::Calc qw/Today/;
33
34
my $input = new CGI;
35
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
36
    {   template_name   => "acqui/transferorder.tmpl",
37
        query           => $input,
38
        type            => "intranet",
39
        authnotrequired => 1,
40
        flagsrequired   => { acquisition => 'order_manage' },
41
        debug           => 1,
42
    }
43
);
44
45
my $dbh = C4::Context->dbh;
46
47
my $bookselleridfrom    = $input->param('bookselleridfrom');
48
my $ordernumber     = $input->param('ordernumber');
49
my $bookselleridto  = $input->param('bookselleridto');
50
my $basketno        = $input->param('basketno');
51
my $op              = $input->param('op');
52
my $query           = $input->param('query');
53
54
my $order = GetOrder($ordernumber);
55
if($order) {
56
    my $basket = GetBasket($order->{basketno});
57
    $bookselleridfrom = $basket->{booksellerid} if $basket;
58
}
59
60
my $booksellerfrom = GetBookSellerFromId($bookselleridfrom);
61
my $booksellerfromname;
62
if($booksellerfrom){
63
    $booksellerfromname = $booksellerfrom->{name};
64
}
65
my $booksellerto = GetBookSellerFromId($bookselleridto);
66
my $booksellertoname;
67
if($booksellerto){
68
    $booksellertoname = $booksellerto->{name};
69
}
70
71
if( $basketno && $ordernumber) {
72
    # Transfer order and exit
73
    my $order = GetOrder( $ordernumber );
74
    my $basket = GetBasket($order->{basketno});
75
    my $booksellerfrom = GetBookSellerFromId($basket->{booksellerid});
76
    my $bookselleridfrom = $booksellerfrom->{id};
77
78
    TransferOrder($ordernumber, $basketno);
79
80
    my $referrer = $input->param('referrer');
81
    print $input->redirect($referrer);
82
    exit;
83
} elsif ( $bookselleridto && $ordernumber) {
84
    # Show open baskets for this bookseller
85
    my $order = GetOrder( $ordernumber );
86
    my $basketfrom = GetBasket( $order->{basketno} );
87
    my $booksellerfrom = GetBookSellerFromId( $basketfrom->{booksellerid} );
88
    $booksellerfromname = $booksellerfrom->{name};
89
    my $baskets = GetBasketsByBookseller( $bookselleridto );
90
    my $basketscount = scalar @$baskets;
91
    my @basketsloop = ();
92
    for( my $i = 0 ; $i < $basketscount ; $i++ ){
93
        my %line;
94
        %line = %{ $baskets->[$i] };
95
        my $createdby = GetMember(borrowernumber => $line{authorisedby});
96
        $line{createdby} = "$createdby->{surname}, $createdby->{firstname}";
97
        push @basketsloop, \%line unless $line{closedate};
98
    }
99
    $template->param(
100
        show_baskets => 1,
101
        basketsloop => \@basketsloop,
102
        basketfromname => $basketfrom->{basketname},
103
    );
104
} elsif ( $bookselleridfrom && !defined $ordernumber) {
105
    # Show pending orders
106
    my $pendingorders = GetPendingOrders($bookselleridfrom);
107
    my $orderscount = scalar @$pendingorders;
108
    my @ordersloop = ();
109
    for( my $i = 0 ; $i < $orderscount ; $i++ ){
110
        my %line;
111
        %line = %{ $pendingorders->[$i] };
112
        push @ordersloop, \%line;
113
    }
114
    $template->param(
115
        ordersloop  => \@ordersloop,
116
    );
117
} else {
118
    # Search for booksellers to transfer from/to
119
    $op = '' unless $op;
120
    if( $op eq "do_search" ) {
121
        my @booksellers = GetBookSeller($query);
122
        $template->param(
123
            query => $query,
124
            do_search => 1,
125
            booksellersloop => \@booksellers,
126
        );
127
    } else {
128
        $template->param(
129
            search_form => 1,
130
        );
131
    }
132
}
133
134
$template->param(
135
    bookselleridfrom    => $bookselleridfrom,
136
    booksellerfromname  => $booksellerfromname,
137
    bookselleridto      => $bookselleridto,
138
    booksellertoname    => $booksellertoname,
139
    ordernumber         => $ordernumber,
140
    basketno            => $basketno,
141
    referrer            => $input->param('referrer')
142
);
143
144
output_html_with_http_headers $input, $cookie, $template->output;
145
(-)a/installer/data/mysql/kohastructure.sql (+1 lines)
Lines 2777-2782 CREATE TABLE `aqorders` ( -- information related to the basket line items Link Here
2777
  `cancelledby` varchar(10) default NULL, -- not used? always NULL
2777
  `cancelledby` varchar(10) default NULL, -- not used? always NULL
2778
  `datecancellationprinted` date default NULL, -- the date the line item was deleted
2778
  `datecancellationprinted` date default NULL, -- the date the line item was deleted
2779
  `notes` mediumtext, -- notes related to this order line
2779
  `notes` mediumtext, -- notes related to this order line
2780
  internalnotes mediumtext DEFAULT NULL, -- used by Koha to store some informations, not editable by librarians
2780
  `supplierreference` mediumtext, -- not used? always NULL
2781
  `supplierreference` mediumtext, -- not used? always NULL
2781
  `purchaseordernumber` mediumtext, -- not used? always NULL
2782
  `purchaseordernumber` mediumtext, -- not used? always NULL
2782
  `subscription` tinyint(1) default NULL, -- not used? always NULL
2783
  `subscription` tinyint(1) default NULL, -- not used? always NULL
(-)a/installer/data/mysql/updatedatabase.pl (-1 / +10 lines)
Lines 5768-5774 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { Link Here
5768
    SetVersion($DBversion);
5768
    SetVersion($DBversion);
5769
}
5769
}
5770
5770
5771
5772
$DBversion = '3.09.00.044';
5771
$DBversion = '3.09.00.044';
5773
if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5772
if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5774
    $dbh->do("ALTER TABLE statistics ADD COLUMN ccode VARCHAR ( 10 ) NULL AFTER associatedborrower");
5773
    $dbh->do("ALTER TABLE statistics ADD COLUMN ccode VARCHAR ( 10 ) NULL AFTER associatedborrower");
Lines 5973-5978 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { Link Here
5973
    SetVersion($DBversion);
5972
    SetVersion($DBversion);
5974
}
5973
}
5975
5974
5975
$DBversion = "XXX";
5976
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5977
    $dbh->do(qq{
5978
        ALTER TABLE aqorders
5979
        ADD COLUMN internalnotes MEDIUMTEXT DEFAULT NULL AFTER notes
5980
    });
5981
    print "Upgrade to $DBversion done (Add internalnotes field in aqorders table)\n";
5982
    SetVersion($DBversion);
5983
}
5984
5976
5985
5977
=head1 FUNCTIONS
5986
=head1 FUNCTIONS
5978
5987
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt (+6 lines)
Lines 342-347 Link Here
342
                                    [<a href="/cgi-bin/koha/acqui/modordernotes.pl?ordernumber=[% books_loo.ordernumber %]">Add note</a>]
342
                                    [<a href="/cgi-bin/koha/acqui/modordernotes.pl?ordernumber=[% books_loo.ordernumber %]">Add note</a>]
343
                                [% END %]
343
                                [% END %]
344
                            </p>
344
                            </p>
345
                            <p>[% books_loo.internalnotes %]</p>
345
                        </td>
346
                        </td>
346
                        <td class="number gste [% IF books_loo.rrpgste.search('^0') %]error[% END %]">[% books_loo.rrpgste %]</td>
347
                        <td class="number gste [% IF books_loo.rrpgste.search('^0') %]error[% END %]">[% books_loo.rrpgste %]</td>
347
                        <td class="number gste [% IF books_loo.ecostgste.search('^0') %]error[% END %]">[% books_loo.ecostgste %]</td>
348
                        <td class="number gste [% IF books_loo.ecostgste.search('^0') %]error[% END %]">[% books_loo.ecostgste %]</td>
Lines 357-362 Link Here
357
                            [% UNLESS ( closedate ) %]
358
                            [% UNLESS ( closedate ) %]
358
                            <td>
359
                            <td>
359
                                <a href="neworderempty.pl?ordernumber=[% books_loo.ordernumber %]&amp;booksellerid=[% booksellerid %]&amp;basketno=[% basketno %]">Modify</a>
360
                                <a href="neworderempty.pl?ordernumber=[% books_loo.ordernumber %]&amp;booksellerid=[% booksellerid %]&amp;basketno=[% basketno %]">Modify</a>
361
                                [% UNLESS (books_loo.order_received) %]
362
                                    <br />
363
                                    <a href="/cgi-bin/koha/acqui/transferorder.pl?ordernumber=[% books_loo.ordernumber %]&referrer=[% "/cgi-bin/koha/acqui/basket.pl?basketno=$basketno" | uri %]">Transfer</a>
364
                                [% END %]
360
                            </td>
365
                            </td>
361
                            <td>
366
                            <td>
362
                            [% IF ( books_loo.left_holds_on_order ) %]
367
                            [% IF ( books_loo.left_holds_on_order ) %]
Lines 433-438 Link Here
433
                        [% IF ( order.publicationyear ) %], [% order.publicationyear %][% END %]
438
                        [% IF ( order.publicationyear ) %], [% order.publicationyear %][% END %]
434
                        [% IF ( books_loo.editionstatement ) %], [% books_loo.editionstatement %][% END %]
439
                        [% IF ( books_loo.editionstatement ) %], [% books_loo.editionstatement %][% END %]
435
                      </p>
440
                      </p>
441
                      <p>[% order.internalnotes %]</p>
436
                    </td>
442
                    </td>
437
                    <td class="number gste">[% order.rrpgste %]</td>
443
                    <td class="number gste">[% order.rrpgste %]</td>
438
                    <td class="number gste">[% order.ecostgste %]</td>
444
                    <td class="number gste">[% order.ecostgste %]</td>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt (+2 lines)
Lines 247-252 Link Here
247
                <td>[% loop_order.budget_name %]</td>
247
                <td>[% loop_order.budget_name %]</td>
248
				<td>
248
				<td>
249
                              <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;invoiceid=[% invoiceid %]">Receive</a>
249
                              <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;invoiceid=[% invoiceid %]">Receive</a>
250
                    <br />
251
                    <a href="/cgi-bin/koha/acqui/transferorder.pl?ordernumber=[% loop_order.ordernumber %]&amp;referrer=[% "/cgi-bin/koha/acqui/parcel.pl?invoiceid=[% invoiceid %]" | uri %]">Transfer</a>
250
				</td>
252
				</td>
251
				<td>
253
				<td>
252
                        [% IF ( loop_order.left_holds_on_order ) %]
254
                        [% IF ( loop_order.left_holds_on_order ) %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/transferorder.tt (-1 / +121 lines)
Line 0 Link Here
0
- 
1
[% INCLUDE 'doc-head-open.inc' %]
2
<title>Koha &rsaquo; Acquisitions &rsaquo; Transfer order</title>
3
[% INCLUDE 'doc-head-close.inc' %]
4
</head>
5
<body>
6
[% INCLUDE 'header.inc' %]
7
[% INCLUDE 'acquisitions-search.inc' %]
8
9
<div id="breadcrumbs">
10
    <a href="/cgi-bin/koha/mainpage.pl">Home</a>
11
    &rsaquo; <a href="/cgi-bin/koha/acqui/acqui-home.pl">Acquisitions</a>
12
    &rsaquo; Transfer order
13
</div>
14
15
<div id="doc3" class="yui-t2">
16
<div id="bd">
17
<div id="yui-main">
18
    <div class="yui-b">
19
        [% IF ( show_baskets ) %]
20
            <h1>Baskets for [% booksellertoname %]</h1>
21
            [% IF ( basketsloop ) %]
22
                <table>
23
                    <thead>
24
                        <th>Basket (#)</th>
25
                        <th>Created by</th>
26
                        <th>Date</th>
27
                        <th>&nbsp;</th>
28
                    </thead>
29
                    <tbody>
30
                        [% FOREACH basket IN basketsloop %]
31
                          <tr>
32
                            <td>[% basket.basketname %] (#[% basket.basketno %])</td>
33
                            <td>[% basket.createdby %]</td>
34
                            <td>[% basket.creationdate %]</td>
35
                            <td><a href="transferorder.pl?basketno=[% basket.basketno %]&ordernumber=[% ordernumber %][% IF (referrer) %]&referrer=[% referrer | uri %][% END %]" onclick="return confirm('Do you want to transfer order [% ordernumber %] from basket [% basketfromname %] ([% booksellerfromname %]) to basket [% basket.basketname %] ([% booksellertoname %]) ?');">Choose</a>
36
                          </tr>
37
                        [% END %]
38
                    </tbody>
39
                </table>
40
            [% ELSE %]
41
                <p>There is no open baskets for this supplier.</p>
42
            [% END %]
43
        [% END %]
44
        [% IF ( ordersloop ) %]
45
            <h1>Orders for [% booksellerfromname %]</h1>
46
            <table>
47
                <thead>
48
                    <th>Order</th>
49
                    <th>Summary</th>
50
                    <th>&nbsp;</th>
51
                </thead>
52
                <tbody>
53
                    [% FOREACH ordersloo IN ordersloop %]
54
                      <tr>
55
                        <td><a href="neworderempty.pl?ordernumber=[% ordersloo.ordernumber %]">[% ordersloo.ordernumber %]</a></td>
56
                        <td>
57
                            <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% ordersloo.biblionumber %]">[% ordersloo.title |html %]</a>
58
                            [% IF ( ordersloo.author ) %] by [% ordersloo.author %][% END %]
59
                            [% IF ( ordersloo.isbn ) %] &ndash; [% ordersloo.isbn %][% END %]
60
                            [% IF ( ordersloo.publishercode ) %]<br />Publisher :[% ordersloo.publishercode %][% END %]
61
                        </td>
62
                        <td><a href="transferorder.pl?bookselleridfrom=[% ordersloo.bookselleridfrom %]&ordernumber=[% ordersloo.ordernumber %][% IF (referrer) %]&referrer=[% referrer | uri %][% END %]">Transfer</a></td>
63
                      </tr>
64
                    [% END %]
65
                </tbody>
66
            </table>
67
        [% END %]
68
        [% IF ( do_search ) %]
69
            [% IF ( bookselleridfrom ) %]
70
                <h1>Choose a vendor to transfer to</h1>
71
            [% ELSE %]
72
                <h1>Choose a vendor to transfer from</h1>
73
            [% END %]
74
            [% IF ( booksellersloop ) %]
75
                <table>
76
                    <thead>
77
                        <th>Name</th>
78
                        <th>&nbsp;</th>
79
                    </thead>
80
                    <tbody>
81
                        [% FOREACH bookseller IN booksellersloop %]
82
                          <tr>
83
                            <td>[% bookseller.name %]</td>
84
                            <td><a href="transferorder.pl?[% IF (bookselleridfrom) %]bookselleridto[% ELSE %]bookselleridfrom[% END %]=[% bookseller.id %][% IF (ordernumber) %]&ordernumber=[% ordernumber %][% END %][% IF (referrer) %]&referrer=[% referrer | uri %][% END %]">Choose</a></td>
85
                          </tr>
86
                        [% END %]
87
                    </tbody>
88
                 </table>
89
            [% ELSE %]
90
                <p>No results found.</p>
91
            [% END %]
92
        [% END %]
93
        [% IF ( search_form ) %]
94
            [% IF ( bookselleridfrom ) %]
95
                <h1>Search for a vendor to transfer to</h1>
96
            [% ELSE %]
97
                <h1>Search for a vendor to transfer from</h1>
98
            [% END %]
99
            <form method="get" action="transferorder.pl">
100
                <input type="hidden" name="op" value="do_search" />
101
                <input type="hidden" name="referrer" value="[% referrer %]" />
102
                [% IF ( ordernumber ) %]
103
                    <input type="hidden" name="ordernumber" value="[% ordernumber %]" />
104
                [% END %]
105
                [% IF ( bookselleridfrom ) %]
106
                    <input type="hidden" name="bookselleridfrom" value="[% bookselleridfrom %]" />
107
                [% END %]
108
                <label for="query">Vendor:</label>
109
                <input type="text" name="query" />
110
                <input type="submit" value="Search" />
111
            </form>
112
        [% END %]
113
    </div>
114
</div>
115
116
<div class="yui-b">
117
    [% INCLUDE 'acquisitions-menu.inc' %]
118
</div>
119
</div>
120
</div>
121
[% INCLUDE 'intranet-bottom.inc' %]

Return to bug 5349