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 1550-1555 sub DelOrder { Link Here
1550
    
1550
    
1551
}
1551
}
1552
1552
1553
=head3 TransferOrder
1554
1555
    my $newordernumber = TransferOrder($ordernumber, $basketno);
1556
1557
Transfer an order line to a basket.
1558
Mark $ordernumber as cancelled with an internal note 'Cancelled and transfered
1559
to BOOKSELLER on DATE' and create new order with internal note
1560
'Transfered from BOOKSELLER on DATE'.
1561
Move all attached items to the new order.
1562
Received orders cannot be transfered.
1563
Return the ordernumber of created order.
1564
1565
=cut
1566
1567
sub TransferOrder {
1568
    my ($ordernumber, $basketno) = @_;
1569
1570
    return unless $ordernumber or $basketno;
1571
1572
    my $order = GetOrder( $ordernumber );
1573
    return if $order->{datereceived};
1574
1575
    my $today = C4::Dates->new()->output("iso");
1576
    my $query = qq{
1577
        SELECT aqbooksellers.name
1578
        FROM aqorders
1579
            LEFT JOIN aqbasket ON aqorders.basketno = aqbasket.basketno
1580
            LEFT JOIN aqbooksellers ON aqbasket.booksellerid = aqbooksellers.id
1581
        WHERE aqorders.ordernumber = ?
1582
    };
1583
    my $dbh = C4::Context->dbh;
1584
    my $sth = $dbh->prepare($query);
1585
    $sth->execute($ordernumber);
1586
    my ($booksellerfromname) = $sth->fetchrow_array;
1587
1588
    $query = qq{
1589
        SELECT aqbooksellers.name
1590
        FROM aqbasket
1591
            LEFT JOIN aqbooksellers ON aqbasket.booksellerid = aqbooksellers.id
1592
        WHERE aqbasket.basketno = ?
1593
    };
1594
    $sth = $dbh->prepare($query);
1595
    $sth->execute($basketno);
1596
    my ($booksellertoname) = $sth->fetchrow_array;
1597
1598
    $query = qq{
1599
        UPDATE aqorders
1600
        SET datecancellationprinted = CAST(NOW() AS date),
1601
            internalnotes = ?
1602
        WHERE ordernumber = ?
1603
    };
1604
    $sth = $dbh->prepare($query);
1605
    $sth->execute("Cancelled and transfered to $booksellertoname on $today", $ordernumber);
1606
1607
    delete $order->{'ordernumber'};
1608
    $order->{'basketno'} = $basketno;
1609
    $order->{'internalnotes'} = "Transfered from $booksellerfromname on $today";
1610
    my $newordernumber;
1611
    (undef, $newordernumber) = NewOrder($order);
1612
1613
    $query = qq{
1614
        UPDATE aqorders_items
1615
        SET ordernumber = ?
1616
        WHERE ordernumber = ?
1617
    };
1618
    $sth = $dbh->prepare($query);
1619
    $sth->execute($newordernumber, $ordernumber);
1620
1621
    return $newordernumber;
1622
}
1623
1553
=head2 FUNCTIONS ABOUT PARCELS
1624
=head2 FUNCTIONS ABOUT PARCELS
1554
1625
1555
=cut
1626
=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 2753-2758 CREATE TABLE `aqorders` ( -- information related to the basket line items Link Here
2753
  `cancelledby` varchar(10) default NULL, -- not used? always NULL
2753
  `cancelledby` varchar(10) default NULL, -- not used? always NULL
2754
  `datecancellationprinted` date default NULL, -- the date the line item was deleted
2754
  `datecancellationprinted` date default NULL, -- the date the line item was deleted
2755
  `notes` mediumtext, -- notes related to this order line
2755
  `notes` mediumtext, -- notes related to this order line
2756
  internalnotes mediumtext DEFAULT NULL, -- used by Koha to store some informations, not editable by librarians
2756
  `supplierreference` mediumtext, -- not used? always NULL
2757
  `supplierreference` mediumtext, -- not used? always NULL
2757
  `purchaseordernumber` mediumtext, -- not used? always NULL
2758
  `purchaseordernumber` mediumtext, -- not used? always NULL
2758
  `subscription` tinyint(1) default NULL, -- not used? always NULL
2759
  `subscription` tinyint(1) default NULL, -- not used? always NULL
(-)a/installer/data/mysql/updatedatabase.pl (-1 / +11 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 5781-5786 if (C4::Context->preference("Version") < TransformToNum($DBversion)) { Link Here
5781
    SetVersion ($DBversion);
5780
    SetVersion ($DBversion);
5782
}
5781
}
5783
5782
5783
$DBversion = "XXX";
5784
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5785
    $dbh->do(qq{
5786
        ALTER TABLE aqorders
5787
        ADD COLUMN internalnotes MEDIUMTEXT DEFAULT NULL AFTER notes
5788
    });
5789
    print "Upgrade to $DBversion done (Add internalnotes field in aqorders table)\n";
5790
    SetVersion($DBversion);
5791
}
5792
5793
5784
=head1 FUNCTIONS
5794
=head1 FUNCTIONS
5785
5795
5786
=head2 TableExists($table)
5796
=head2 TableExists($table)
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt (+6 lines)
Lines 312-317 Link Here
312
                                    [<a href="/cgi-bin/koha/acqui/modordernotes.pl?ordernumber=[% books_loo.ordernumber %]">Add note</a>]
312
                                    [<a href="/cgi-bin/koha/acqui/modordernotes.pl?ordernumber=[% books_loo.ordernumber %]">Add note</a>]
313
                                [% END %]
313
                                [% END %]
314
                            </p>
314
                            </p>
315
                            <p>[% books_loo.internalnotes %]</p>
315
                        </td>
316
                        </td>
316
                        <td class="number [% IF books_loo.rrp.search('^0') %]error[% END %]">[% books_loo.rrp %]</td>
317
                        <td class="number [% IF books_loo.rrp.search('^0') %]error[% END %]">[% books_loo.rrp %]</td>
317
                        <td class="number [% IF books_loo.ecost.search('^0') %]error[% END %]">[% books_loo.ecost %]</td>
318
                        <td class="number [% IF books_loo.ecost.search('^0') %]error[% END %]">[% books_loo.ecost %]</td>
Lines 322-327 Link Here
322
                            [% UNLESS ( closedate ) %]
323
                            [% UNLESS ( closedate ) %]
323
                            <td>
324
                            <td>
324
                                <a href="neworderempty.pl?ordernumber=[% books_loo.ordernumber %]&amp;booksellerid=[% booksellerid %]&amp;basketno=[% basketno %]">Modify</a>
325
                                <a href="neworderempty.pl?ordernumber=[% books_loo.ordernumber %]&amp;booksellerid=[% booksellerid %]&amp;basketno=[% basketno %]">Modify</a>
326
                                [% UNLESS (books_loo.order_received) %]
327
                                    <br />
328
                                    <a href="/cgi-bin/koha/acqui/transferorder.pl?ordernumber=[% books_loo.ordernumber %]&referrer=[% "/cgi-bin/koha/acqui/basket.pl?basketno=$basketno" | uri %]">Transfer</a>
329
                                [% END %]
325
                            </td>
330
                            </td>
326
                            <td>
331
                            <td>
327
                            [% IF ( books_loo.left_holds_on_order ) %]
332
                            [% IF ( books_loo.left_holds_on_order ) %]
Lines 393-398 Link Here
393
                        [% IF ( order.publicationyear ) %], [% order.publicationyear %][% END %]
398
                        [% IF ( order.publicationyear ) %], [% order.publicationyear %][% END %]
394
                        [% IF ( books_loo.editionstatement ) %], [% books_loo.editionstatement %][% END %]
399
                        [% IF ( books_loo.editionstatement ) %], [% books_loo.editionstatement %][% END %]
395
                      </p>
400
                      </p>
401
                      <p>[% order.internalnotes %]</p>
396
                    </td>
402
                    </td>
397
                    <td><p>[% order.rrp %]</p></td>
403
                    <td><p>[% order.rrp %]</p></td>
398
                    <td><p>[% order.ecost %]</p></td>
404
                    <td><p>[% order.ecost %]</p></td>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt (+2 lines)
Lines 241-246 Link Here
241
                <td>[% loop_order.ordertotal %]</td>
241
                <td>[% loop_order.ordertotal %]</td>
242
				<td>
242
				<td>
243
                              <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;datereceived=[% invoicedatereceived %]&amp;invoice=[% invoice %]&amp;gst=[% loop_order.gst %]&amp;freight=[% loop_order.freight %]&amp;booksellerid=[% loop_order.booksellerid %]">Receive</a>
243
                              <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;datereceived=[% invoicedatereceived %]&amp;invoice=[% invoice %]&amp;gst=[% loop_order.gst %]&amp;freight=[% loop_order.freight %]&amp;booksellerid=[% loop_order.booksellerid %]">Receive</a>
244
                    <br />
245
                    <a href="/cgi-bin/koha/acqui/transferorder.pl?ordernumber=[% loop_order.ordernumber %]&amp;referrer=[% "/cgi-bin/koha/acqui/parcel.pl?booksellerid=$booksellerid&datereceived=$invoicedatereceived&invoice=$invoice" | uri %]">Transfer</a>
244
				    
246
				    
245
				</td>
247
				</td>
246
				<td>
248
				<td>
(-)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