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

(-)a/C4/Acquisition.pm (-1 / +73 lines)
Lines 57-64 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
        &GetLastOrderNotReceivedFromSubscriptionid &GetLastOrderReceivedFromSubscriptionid
61
        &GetLastOrderNotReceivedFromSubscriptionid &GetLastOrderReceivedFromSubscriptionid
62
62
        &NewOrderItem &ModOrderItem &ModItemOrder
63
        &NewOrderItem &ModOrderItem &ModItemOrder
63
64
64
        &GetParcels &GetParcel
65
        &GetParcels &GetParcel
Lines 1682-1687 sub DelOrder { Link Here
1682
    
1683
    
1683
}
1684
}
1684
1685
1686
=head3 TransferOrder
1687
1688
    my $newordernumber = TransferOrder($ordernumber, $basketno);
1689
1690
Transfer an order line to a basket.
1691
Mark $ordernumber as cancelled with an internal note 'Cancelled and transfered
1692
to BOOKSELLER on DATE' and create new order with internal note
1693
'Transfered from BOOKSELLER on DATE'.
1694
Move all attached items to the new order.
1695
Received orders cannot be transfered.
1696
Return the ordernumber of created order.
1697
1698
=cut
1699
1700
sub TransferOrder {
1701
    my ($ordernumber, $basketno) = @_;
1702
1703
    return unless $ordernumber or $basketno;
1704
1705
    my $order = GetOrder( $ordernumber );
1706
    return if $order->{datereceived};
1707
1708
    my $today = C4::Dates->new()->output("iso");
1709
    my $query = qq{
1710
        SELECT aqbooksellers.name
1711
        FROM aqorders
1712
            LEFT JOIN aqbasket ON aqorders.basketno = aqbasket.basketno
1713
            LEFT JOIN aqbooksellers ON aqbasket.booksellerid = aqbooksellers.id
1714
        WHERE aqorders.ordernumber = ?
1715
    };
1716
    my $dbh = C4::Context->dbh;
1717
    my $sth = $dbh->prepare($query);
1718
    $sth->execute($ordernumber);
1719
    my ($booksellerfromname) = $sth->fetchrow_array;
1720
1721
    $query = qq{
1722
        SELECT aqbooksellers.name
1723
        FROM aqbasket
1724
            LEFT JOIN aqbooksellers ON aqbasket.booksellerid = aqbooksellers.id
1725
        WHERE aqbasket.basketno = ?
1726
    };
1727
    $sth = $dbh->prepare($query);
1728
    $sth->execute($basketno);
1729
    my ($booksellertoname) = $sth->fetchrow_array;
1730
1731
    $query = qq{
1732
        UPDATE aqorders
1733
        SET datecancellationprinted = CAST(NOW() AS date),
1734
            internalnotes = ?
1735
        WHERE ordernumber = ?
1736
    };
1737
    $sth = $dbh->prepare($query);
1738
    $sth->execute("Cancelled and transfered to $booksellertoname on $today", $ordernumber);
1739
1740
    delete $order->{'ordernumber'};
1741
    $order->{'basketno'} = $basketno;
1742
    $order->{'internalnotes'} = "Transfered from $booksellerfromname on $today";
1743
    my $newordernumber;
1744
    (undef, $newordernumber) = NewOrder($order);
1745
1746
    $query = qq{
1747
        UPDATE aqorders_items
1748
        SET ordernumber = ?
1749
        WHERE ordernumber = ?
1750
    };
1751
    $sth = $dbh->prepare($query);
1752
    $sth->execute($newordernumber, $ordernumber);
1753
1754
    return $newordernumber;
1755
}
1756
1685
=head2 FUNCTIONS ABOUT PARCELS
1757
=head2 FUNCTIONS ABOUT PARCELS
1686
1758
1687
=cut
1759
=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 2893-2898 CREATE TABLE `aqorders` ( -- information related to the basket line items Link Here
2893
  `cancelledby` varchar(10) default NULL, -- not used? always NULL
2893
  `cancelledby` varchar(10) default NULL, -- not used? always NULL
2894
  `datecancellationprinted` date default NULL, -- the date the line item was deleted
2894
  `datecancellationprinted` date default NULL, -- the date the line item was deleted
2895
  `notes` mediumtext, -- notes related to this order line
2895
  `notes` mediumtext, -- notes related to this order line
2896
  internalnotes mediumtext DEFAULT NULL, -- used by Koha to store some informations, not editable by librarians
2896
  `supplierreference` mediumtext, -- not used? always NULL
2897
  `supplierreference` mediumtext, -- not used? always NULL
2897
  `purchaseordernumber` mediumtext, -- not used? always NULL
2898
  `purchaseordernumber` mediumtext, -- not used? always NULL
2898
  `basketno` int(11) default NULL, -- links this order line to a specific basket (aqbasket.basketno)
2899
  `basketno` int(11) default NULL, -- links this order line to a specific basket (aqbasket.basketno)
(-)a/installer/data/mysql/updatedatabase.pl (+10 lines)
Lines 6990-6995 if ( CheckVersion($DBversion) ) { Link Here
6990
    SetVersion($DBversion);
6990
    SetVersion($DBversion);
6991
}
6991
}
6992
6992
6993
$DBversion = "XXX";
6994
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6995
    $dbh->do(qq{
6996
        ALTER TABLE aqorders
6997
        ADD COLUMN internalnotes MEDIUMTEXT DEFAULT NULL AFTER notes
6998
    });
6999
    print "Upgrade to $DBversion done (Add internalnotes field in aqorders table)\n";
7000
    SetVersion($DBversion);
7001
}
7002
6993
7003
6994
=head1 FUNCTIONS
7004
=head1 FUNCTIONS
6995
7005
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt (+6 lines)
Lines 337-342 Link Here
337
                                [% ELSE %]
337
                                [% ELSE %]
338
                                    <p>[<a href="/cgi-bin/koha/acqui/modordernotes.pl?ordernumber=[% books_loo.ordernumber %]">Add note</a>]</p>
338
                                    <p>[<a href="/cgi-bin/koha/acqui/modordernotes.pl?ordernumber=[% books_loo.ordernumber %]">Add note</a>]</p>
339
                                [% END %]
339
                                [% END %]
340
                            <p>[% books_loo.internalnotes %]</p>
340
                        </td>
341
                        </td>
341
                        <td class="number gste [% IF books_loo.rrpgste.search('^0') %]error[% END %]">[% books_loo.rrpgste %]</td>
342
                        <td class="number gste [% IF books_loo.rrpgste.search('^0') %]error[% END %]">[% books_loo.rrpgste %]</td>
342
                        <td class="number gste [% IF books_loo.ecostgste.search('^0') %]error[% END %]">[% books_loo.ecostgste %]</td>
343
                        <td class="number gste [% IF books_loo.ecostgste.search('^0') %]error[% END %]">[% books_loo.ecostgste %]</td>
Lines 352-357 Link Here
352
                            [% UNLESS ( closedate ) %]
353
                            [% UNLESS ( closedate ) %]
353
                            <td>
354
                            <td>
354
                                <a href="neworderempty.pl?ordernumber=[% books_loo.ordernumber %]&amp;booksellerid=[% booksellerid %]&amp;basketno=[% basketno %]">Modify</a>
355
                                <a href="neworderempty.pl?ordernumber=[% books_loo.ordernumber %]&amp;booksellerid=[% booksellerid %]&amp;basketno=[% basketno %]">Modify</a>
356
                                [% UNLESS (books_loo.order_received) %]
357
                                    <br />
358
                                    <a href="/cgi-bin/koha/acqui/transferorder.pl?ordernumber=[% books_loo.ordernumber %]&referrer=[% "/cgi-bin/koha/acqui/basket.pl?basketno=$basketno" | uri %]">Transfer</a>
359
                                [% END %]
355
                            </td>
360
                            </td>
356
                            <td>
361
                            <td>
357
                            [% IF ( books_loo.left_holds_on_order ) %]
362
                            [% IF ( books_loo.left_holds_on_order ) %]
Lines 424-429 Link Here
424
                        [% IF ( order.publicationyear ) %], [% order.publicationyear %][% END %]
429
                        [% IF ( order.publicationyear ) %], [% order.publicationyear %][% END %]
425
                        [% IF ( books_loo.editionstatement ) %], [% books_loo.editionstatement %][% END %]
430
                        [% IF ( books_loo.editionstatement ) %], [% books_loo.editionstatement %][% END %]
426
                      </p>
431
                      </p>
432
                      <p>[% order.internalnotes %]</p>
427
                    </td>
433
                    </td>
428
                    <td class="number gste">[% order.rrpgste %]</td>
434
                    <td class="number gste">[% order.rrpgste %]</td>
429
                    <td class="number gste">[% order.ecostgste %]</td>
435
                    <td class="number gste">[% order.ecostgste %]</td>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt (+2 lines)
Lines 212-217 Link Here
212
                <td>[% loop_order.budget_name %]</td>
212
                <td>[% loop_order.budget_name %]</td>
213
				<td>
213
				<td>
214
                              <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;invoiceid=[% invoiceid %]">Receive</a>
214
                              <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;invoiceid=[% invoiceid %]">Receive</a>
215
                    <br />
216
                    <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>
215
				</td>
217
				</td>
216
				<td>
218
				<td>
217
                        [% IF ( loop_order.left_holds_on_order ) %]
219
                        [% 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