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

(-)a/C4/Acquisition.pm (-141 / +94 lines)
Lines 53-61 BEGIN { Link Here
53
        &ModBasketgroup &NewBasketgroup &DelBasketgroup &GetBasketgroup &CloseBasketgroup
53
        &ModBasketgroup &NewBasketgroup &DelBasketgroup &GetBasketgroup &CloseBasketgroup
54
        &GetBasketgroups &ReOpenBasketgroup
54
        &GetBasketgroups &ReOpenBasketgroup
55
55
56
        &NewOrder &DelOrder &ModOrder &GetPendingOrders &GetOrder &GetOrders &GetOrdersByBiblionumber
56
        &NewOrder &DelOrder &ModOrder &GetOrder &GetOrders &GetOrdersByBiblionumber
57
        &NewOrder &DelOrder &ModOrder &GetOrder &GetOrders
57
        &GetOrderNumber &GetLateOrders &GetOrderFromItemnumber
58
        &GetOrderNumber &GetLateOrders &GetOrderFromItemnumber
58
        &SearchOrder &GetHistory &GetRecentAcqui
59
        &SearchOrders &GetHistory &GetRecentAcqui
59
        &ModReceiveOrder &CancelReceipt &ModOrderBiblioitemNumber
60
        &ModReceiveOrder &CancelReceipt &ModOrderBiblioitemNumber
60
        &GetCancelledOrders
61
        &GetCancelledOrders
61
        &GetLastOrderNotReceivedFromSubscriptionid &GetLastOrderReceivedFromSubscriptionid
62
        &GetLastOrderNotReceivedFromSubscriptionid &GetLastOrderReceivedFromSubscriptionid
Lines 822-917 sub GetBasketgroups { Link Here
822
823
823
=head2 FUNCTIONS ABOUT ORDERS
824
=head2 FUNCTIONS ABOUT ORDERS
824
825
825
=cut
826
827
#------------------------------------------------------------#
828
829
=head3 GetPendingOrders
830
831
$orders = &GetPendingOrders($supplierid,$grouped,$owner,$basketno,$ordernumber,$search,$ean);
832
833
Finds pending orders from the bookseller with the given ID. Ignores
834
completed and cancelled orders.
835
836
C<$booksellerid> contains the bookseller identifier
837
C<$owner> contains 0 or 1. 0 means any owner. 1 means only the list of orders entered by the user itself.
838
C<$grouped> is a boolean that, if set to 1 will group all order lines of the same basket
839
in a single result line
840
C<$orders> is a reference-to-array; each element is a reference-to-hash.
841
842
Used also by the filter in parcel.pl
843
I have added:
844
845
C<$ordernumber>
846
C<$search>
847
C<$ean>
848
849
These give the value of the corresponding field in the aqorders table
850
of the Koha database.
851
852
Results are ordered from most to least recent.
853
854
=cut
855
856
sub GetPendingOrders {
857
    my ($supplierid,$grouped,$owner,$basketno,$ordernumber,$search,$ean) = @_;
858
    my $dbh = C4::Context->dbh;
859
    my $strsth = "
860
        SELECT ".($grouped?"count(*),":"")."aqbasket.basketno,
861
               surname,firstname,biblio.*,biblioitems.isbn,
862
               aqbasket.closedate, aqbasket.creationdate, aqbasket.basketname,
863
               aqorders.*
864
        FROM aqorders
865
        LEFT JOIN aqbasket ON aqbasket.basketno=aqorders.basketno
866
        LEFT JOIN borrowers ON aqbasket.authorisedby=borrowers.borrowernumber
867
        LEFT JOIN biblio ON biblio.biblionumber=aqorders.biblionumber
868
        LEFT JOIN biblioitems ON biblioitems.biblionumber=biblio.biblionumber
869
        WHERE (quantity > quantityreceived OR quantityreceived is NULL)
870
        AND datecancellationprinted IS NULL";
871
    my @query_params;
872
    my $userenv = C4::Context->userenv;
873
    if ( C4::Context->preference("IndependentBranches") ) {
874
        if ( ($userenv) && ( $userenv->{flags} != 1 ) ) {
875
            $strsth .= " AND (borrowers.branchcode = ?
876
                        or borrowers.branchcode  = '')";
877
            push @query_params, $userenv->{branch};
878
        }
879
    }
880
    if ($supplierid) {
881
        $strsth .= " AND aqbasket.booksellerid = ?";
882
        push @query_params, $supplierid;
883
    }
884
    if($ordernumber){
885
        $strsth .= " AND (aqorders.ordernumber=?)";
886
        push @query_params, $ordernumber;
887
    }
888
    if($search){
889
        $strsth .= " AND (biblio.title like ? OR biblio.author LIKE ? OR biblioitems.isbn like ?)";
890
        push @query_params, ("%$search%","%$search%","%$search%");
891
    }
892
    if ($ean) {
893
        $strsth .= " AND biblioitems.ean = ?";
894
        push @query_params, $ean;
895
    }
896
    if ($basketno) {
897
        $strsth .= " AND aqbasket.basketno=? ";
898
        push @query_params, $basketno;
899
    }
900
    if ($owner) {
901
        $strsth .= " AND aqbasket.authorisedby=? ";
902
        push @query_params, $userenv->{'number'};
903
    }
904
    $strsth .= " group by aqbasket.basketno" if $grouped;
905
    $strsth .= " order by aqbasket.basketno";
906
    my $sth = $dbh->prepare($strsth);
907
    $sth->execute( @query_params );
908
    my $results = $sth->fetchall_arrayref({});
909
    $sth->finish;
910
    return $results;
911
}
912
913
#------------------------------------------------------------#
914
915
=head3 GetOrders
826
=head3 GetOrders
916
827
917
  @orders = &GetOrders($basketnumber, $orderby);
828
  @orders = &GetOrders($basketnumber, $orderby);
Lines 1572-1651 sub CancelReceipt { Link Here
1572
1483
1573
#------------------------------------------------------------#
1484
#------------------------------------------------------------#
1574
1485
1575
=head3 SearchOrder
1486
=head3 SearchOrders
1576
1487
1577
@results = &SearchOrder($search, $biblionumber, $complete);
1488
@results = &SearchOrders({
1489
    ordernumber => $ordernumber,
1490
    search => $search,
1491
    biblionumber => $biblionumber,
1492
    ean => $ean,
1493
    booksellerid => $booksellerid,
1494
    basketno => $basketno,
1495
    owner => $owner,
1496
    pending => $pending
1497
});
1578
1498
1579
Searches for orders.
1499
Searches for orders.
1580
1500
1581
C<$search> may take one of several forms: if it is an ISBN,
1501
C<$owner> Finds order for the logged in user.
1582
C<&ordersearch> returns orders with that ISBN. If C<$search> is an
1502
C<$pending> Finds pending orders. Ignores completed and cancelled orders.
1583
order number, C<&ordersearch> returns orders with that order number
1584
and biblionumber C<$biblionumber>. Otherwise, C<$search> is considered
1585
to be a space-separated list of search terms; in this case, all of the
1586
terms must appear in the title (matching the beginning of title
1587
words).
1588
1589
If C<$complete> is C<yes>, the results will include only completed
1590
orders. In any case, C<&ordersearch> ignores cancelled orders.
1591
1592
C<&ordersearch> returns an array.
1593
C<@results> is an array of references-to-hash with the following keys:
1594
1595
=over 4
1596
1597
=item C<author>
1598
1503
1599
=item C<seriestitle>
1600
1504
1601
=item C<branchcode>
1505
C<@results> is an array of references-to-hash with the keys are fields
1602
1506
from aqorders, biblio, biblioitems and aqbasket tables.
1603
=item C<budget_id>
1604
1605
=back
1606
1507
1607
=cut
1508
=cut
1608
1509
1609
sub SearchOrder {
1510
sub SearchOrders {
1610
#### -------- SearchOrder-------------------------------
1511
    my ( $params ) = @_;
1611
    my ( $ordernumber, $search, $ean, $supplierid, $basket ) = @_;
1512
    my $ordernumber = $params->{ordernumber};
1513
    my $search = $params->{search};
1514
    my $ean = $params->{ean};
1515
    my $booksellerid = $params->{booksellerid};
1516
    my $basketno = $params->{basketno};
1517
    my $basketname = $params->{basketname};
1518
    my $basketgroupname = $params->{basketgroupname};
1519
    my $owner = $params->{owner};
1520
    my $pending = $params->{pending};
1612
1521
1613
    my $dbh = C4::Context->dbh;
1522
    my $dbh = C4::Context->dbh;
1614
    my @args = ();
1523
    my @args = ();
1615
    my $query =
1524
    my $query = q{
1616
            "SELECT *
1525
        SELECT aqbasket.basketno,
1617
            FROM aqorders
1526
               borrowers.surname,
1527
               borrowers.firstname,
1528
               biblio.*,
1529
               biblioitems.isbn,
1530
               biblioitems.biblioitemnumber,
1531
               aqbasket.closedate,
1532
               aqbasket.creationdate,
1533
               aqbasket.basketname,
1534
               aqorders.*
1535
        FROM aqorders
1536
            LEFT JOIN aqbasket ON aqorders.basketno = aqbasket.basketno
1537
            LEFT JOIN aqbasketgroups ON aqbasket.basketgroupid = aqbasketgroups.id
1538
            LEFT JOIN borrowers ON aqbasket.authorisedby=borrowers.borrowernumber
1618
            LEFT JOIN biblio ON aqorders.biblionumber=biblio.biblionumber
1539
            LEFT JOIN biblio ON aqorders.biblionumber=biblio.biblionumber
1619
            LEFT JOIN biblioitems ON biblioitems.biblionumber=biblio.biblionumber
1540
            LEFT JOIN biblioitems ON biblioitems.biblionumber=biblio.biblionumber
1620
            LEFT JOIN aqbasket ON aqorders.basketno = aqbasket.basketno
1541
        WHERE (datecancellationprinted is NULL)
1621
                WHERE  (datecancellationprinted is NULL)";
1542
    };
1543
1544
    $query .= q{
1545
        AND (quantity > quantityreceived OR quantityreceived is NULL)
1546
    };
1547
1548
    my $userenv = C4::Context->userenv;
1549
    if ( C4::Context->preference("IndependantBranches") ) {
1550
        if ( ( $userenv ) and ( $userenv->{flags} != 1 ) ) {
1551
            $query .= q{
1552
                AND (
1553
                    borrowers.branchcode = ?
1554
                    OR borrowers.branchcode  = ''
1555
                )
1556
            };
1557
            push @args, $userenv->{branch};
1558
        }
1559
    }
1622
1560
1623
    if($ordernumber){
1561
    if ( $ordernumber ) {
1624
        $query .= " AND (aqorders.ordernumber=?)";
1562
        $query .= ' AND (aqorders.ordernumber=?)';
1625
        push @args, $ordernumber;
1563
        push @args, $ordernumber;
1626
    }
1564
    }
1627
    if($search){
1565
    if( $search ) {
1628
        $query .= " AND (biblio.title like ? OR biblio.author LIKE ? OR biblioitems.isbn like ?)";
1566
        $query .= ' AND (biblio.title LIKE ? OR biblio.author LIKE ? OR biblioitems.isbn LIKE ?)';
1629
        push @args, ("%$search%","%$search%","%$search%");
1567
        push @args, ("%$search%","%$search%","%$search%");
1630
    }
1568
    }
1631
    if ($ean) {
1569
    if ( $ean ) {
1632
        $query .= " AND biblioitems.ean = ?";
1570
        $query .= ' AND biblioitems.ean = ?';
1633
        push @args, $ean;
1571
        push @args, $ean;
1634
    }
1572
    }
1635
    if ($supplierid) {
1573
    if ( $booksellerid ) {
1636
        $query .= "AND aqbasket.booksellerid = ?";
1574
        $query .= 'AND aqbasket.booksellerid = ?';
1637
        push @args, $supplierid;
1575
        push @args, $booksellerid;
1638
    }
1576
    }
1639
    if($basket){
1577
    if( $basketno ) {
1640
        $query .= "AND aqorders.basketno = ?";
1578
        $query .= 'AND aqbasket.basketno = ?';
1641
        push @args, $basket;
1579
        push @args, $basketno;
1642
    }
1580
    }
1581
    if( $basketname ) {
1582
        $query .= 'AND aqbasket.basketname LIKE ?';
1583
        push @args, "%$basketname%";
1584
    }
1585
    if( $basketgroupname ) {
1586
        $query .= ' AND aqbasketgroups.name LIKE ?';
1587
        push @args, "%$basketgroupname%";
1588
    }
1589
1590
    if ( $owner ) {
1591
        $query .= ' AND aqbasket.authorisedby=? ';
1592
        push @args, $userenv->{'number'};
1593
    }
1594
1595
    $query .= ' ORDER BY aqbasket.basketno';
1643
1596
1644
    my $sth = $dbh->prepare($query);
1597
    my $sth = $dbh->prepare($query);
1645
    $sth->execute(@args);
1598
    $sth->execute(@args);
1646
    my $results = $sth->fetchall_arrayref({});
1599
    return $sth->fetchall_arrayref({});
1647
    $sth->finish;
1648
    return $results;
1649
}
1600
}
1650
1601
1651
#------------------------------------------------------------#
1602
#------------------------------------------------------------#
Lines 2448-2455 sub GetInvoiceDetails { Link Here
2448
    my $invoice = $sth->fetchrow_hashref;
2399
    my $invoice = $sth->fetchrow_hashref;
2449
2400
2450
    $query = qq{
2401
    $query = qq{
2451
        SELECT aqorders.*, biblio.*
2402
        SELECT aqorders.*, biblio.*,
2403
        aqbasket.basketname
2452
        FROM aqorders
2404
        FROM aqorders
2405
          LEFT JOIN aqbasket ON aqorders.basketno = aqbasket.basketno
2453
          LEFT JOIN biblio ON aqorders.biblionumber = biblio.biblionumber
2406
          LEFT JOIN biblio ON aqorders.biblionumber = biblio.biblionumber
2454
        WHERE invoiceid = ?
2407
        WHERE invoiceid = ?
2455
    };
2408
    };
(-)a/acqui/orderreceive.pl (-1 / +3 lines)
Lines 91-97 $datereceived = $datereceived ? C4::Dates->new($datereceived, 'iso') : C4::Dates Link Here
91
91
92
my $bookseller = GetBookSellerFromId($booksellerid);
92
my $bookseller = GetBookSellerFromId($booksellerid);
93
my $results;
93
my $results;
94
$results = SearchOrder($ordernumber) if $ordernumber;
94
$results = SearchOrders({
95
    ordernumber => $ordernumber
96
}) if $ordernumber;
95
97
96
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
98
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
97
    {
99
    {
(-)a/acqui/parcel.pl (-7 / +20 lines)
Lines 169-176 for my $item ( @parcelitems ) { Link Here
169
    $item->{unitprice} = get_value_with_gst_params( $item->{unitprice}, $item->{gstrate}, $bookseller );
169
    $item->{unitprice} = get_value_with_gst_params( $item->{unitprice}, $item->{gstrate}, $bookseller );
170
    $total = ( $item->{'unitprice'} ) * $item->{'quantityreceived'};
170
    $total = ( $item->{'unitprice'} ) * $item->{'quantityreceived'};
171
    $item->{'unitprice'} += 0;
171
    $item->{'unitprice'} += 0;
172
    my %line;
172
    my %line = %{ $item };
173
    %line          = %{ $item };
174
    my $ecost = get_value_with_gst_params( $line{ecost}, $line{gstrate}, $bookseller );
173
    my $ecost = get_value_with_gst_params( $line{ecost}, $line{gstrate}, $bookseller );
175
    $line{ecost} = sprintf( "%.2f", $ecost );
174
    $line{ecost} = sprintf( "%.2f", $ecost );
176
    $line{invoice} = $invoice->{invoicenumber};
175
    $line{invoice} = $invoice->{invoicenumber};
Lines 214-226 if(!defined $invoice->{closedate}) { Link Here
214
    if($input->param('op') eq "search"){
213
    if($input->param('op') eq "search"){
215
        my $search   = $input->param('summaryfilter') || '';
214
        my $search   = $input->param('summaryfilter') || '';
216
        my $ean      = $input->param('eanfilter') || '';
215
        my $ean      = $input->param('eanfilter') || '';
217
        my $basketno = $input->param('basketfilter') || '';
216
        my $basketname = $input->param('basketfilter') || '';
218
        my $orderno  = $input->param('orderfilter') || '';
217
        my $orderno  = $input->param('orderfilter') || '';
219
        my $grouped;
218
        $pendingorders = SearchOrders({
220
        my $owner;
219
            booksellerid => $booksellerid,
221
        $pendingorders = GetPendingOrders($booksellerid,$grouped,$owner,$basketno,$orderno,$search,$ean);
220
            basketname => $basketname,
221
            ordernumber => $orderno,
222
            search => $search,
223
            ean => $ean,
224
            pending => 1,
225
        });
226
        $template->param(
227
            summaryfilter => $search,
228
            eanfilter => $ean,
229
            basketfilter => $basketname,
230
            orderfilter => $orderno,
231
        );
222
    }else{
232
    }else{
223
        $pendingorders = GetPendingOrders($booksellerid);
233
        $pendingorders = SearchOrders({
234
            booksellerid => $booksellerid,
235
            pending => 1
236
        });
224
    }
237
    }
225
    my $countpendings = scalar @$pendingorders;
238
    my $countpendings = scalar @$pendingorders;
226
239
(-)a/acqui/uncertainprice.pl (-2 / +7 lines)
Lines 52-58 use C4::Output; Link Here
52
use CGI;
52
use CGI;
53
53
54
use C4::Bookseller qw/GetBookSellerFromId/;
54
use C4::Bookseller qw/GetBookSellerFromId/;
55
use C4::Acquisition qw/GetPendingOrders GetOrder ModOrder/;
55
use C4::Acquisition qw/SearchOrders GetOrder ModOrder/;
56
use C4::Biblio qw/GetBiblioData/;
56
use C4::Biblio qw/GetBiblioData/;
57
57
58
my $input=new CGI;
58
my $input=new CGI;
Lines 73-79 my $owner = $input->param('owner') || 0 ; # flag to see only "my" orders, or eve Link Here
73
my $bookseller = &GetBookSellerFromId($booksellerid);
73
my $bookseller = &GetBookSellerFromId($booksellerid);
74
74
75
#show all orders that have uncertain price for the bookseller
75
#show all orders that have uncertain price for the bookseller
76
my $pendingorders = &GetPendingOrders($booksellerid,0,$owner,$basketno);
76
my $pendingorders = SearchOrders({
77
    booksellerid => $booksellerid,
78
    owner => $owner,
79
    basketno => $basketno,
80
    pending => 1,
81
});
77
my @orders;
82
my @orders;
78
83
79
foreach my $order (@{$pendingorders}) {
84
foreach my $order (@{$pendingorders}) {
(-)a/serials/acqui-search-result.pl (-2 / +5 lines)
Lines 45-51 use C4::Auth; Link Here
45
use C4::Biblio;
45
use C4::Biblio;
46
use C4::Output;
46
use C4::Output;
47
use CGI;
47
use CGI;
48
use C4::Acquisition;
48
use C4::Acquisition qw( SearchOrders );
49
use C4::Dates qw/format_date/;
49
use C4::Dates qw/format_date/;
50
use C4::Bookseller qw( GetBookSeller );
50
use C4::Bookseller qw( GetBookSeller );
51
51
Lines 66-72 my @suppliers = GetBookSeller($supplier); Link Here
66
#build result page
66
#build result page
67
my $loop_suppliers = [];
67
my $loop_suppliers = [];
68
for my $s (@suppliers) {
68
for my $s (@suppliers) {
69
    my $orders = GetPendingOrders($s->{'id'});
69
    my $orders = SearchOrders({
70
        booksellerid => $s->{'id'},
71
        pending => 1
72
    });
70
73
71
    my $loop_basket = [];
74
    my $loop_basket = [];
72
    for my $ord ( @{$orders} ) {
75
    for my $ord ( @{$orders} ) {
(-)a/t/db_dependent/Acquisition.t (-2 / +4 lines)
Lines 28-35 SKIP: { Link Here
28
28
29
29
30
my $supplierid = 1;
30
my $supplierid = 1;
31
my $grouped    = 0;
31
my $orders = SearchOrders({
32
my $orders = GetPendingOrders( $supplierid, $grouped );
32
    booksellerid => $supplierid,
33
    pending => 1
34
});
33
isa_ok( $orders, 'ARRAY' );
35
isa_ok( $orders, 'ARRAY' );
34
36
35
my @lateorders = GetLateOrders(0);
37
my @lateorders = GetLateOrders(0);
(-)a/t/db_dependent/lib/KohaTest/Acquisition.pm (-1 / +1 lines)
Lines 20-26 sub methods : Test( 1 ) { Link Here
20
    my @methods = qw(  GetBasket 
20
    my @methods = qw(  GetBasket 
21
                       NewBasket 
21
                       NewBasket 
22
                       CloseBasket 
22
                       CloseBasket 
23
                       GetPendingOrders 
23
                       SearchOrders
24
                       GetOrders 
24
                       GetOrders 
25
                       GetOrderNumber 
25
                       GetOrderNumber 
26
                       GetOrder 
26
                       GetOrder 
(-)a/t/db_dependent/lib/KohaTest/Acquisition/GetPendingOrders.pm (-5 / +10 lines)
Lines 1-4 Link Here
1
package KohaTest::Acquisition::GetPendingOrders;
1
package KohaTest::Acquisition::SearchOrders;
2
use base qw( KohaTest::Acquisition );
2
use base qw( KohaTest::Acquisition );
3
3
4
use strict;
4
use strict;
Lines 17-23 at first, there should be no orders for our bookseller. Link Here
17
sub no_orders : Test( 1 ) {
17
sub no_orders : Test( 1 ) {
18
    my $self = shift;
18
    my $self = shift;
19
19
20
    my $orders = GetPendingOrders( $self->{'booksellerid'} );
20
    my $orders = SearchOrders({
21
        booksellerid => $self->{booksellerid},
22
        pending => 1
23
    });
21
    is( scalar @$orders, 0, 'our new bookseller has no pending orders' )
24
    is( scalar @$orders, 0, 'our new bookseller has no pending orders' )
22
      or diag( Data::Dumper->Dump( [ $orders ], [ 'orders' ] ) );
25
      or diag( Data::Dumper->Dump( [ $orders ], [ 'orders' ] ) );
23
}
26
}
Lines 35-42 sub one_new_order : Test( 49 ) { Link Here
35
38
36
    ok( $basketno, "basketno is $basketno" );
39
    ok( $basketno, "basketno is $basketno" );
37
    ok( $ordernumber, "ordernumber is $ordernumber" );
40
    ok( $ordernumber, "ordernumber is $ordernumber" );
38
    
41
39
    my $orders = GetPendingOrders( $self->{'booksellerid'} );
42
    my $orders = Searchorders({
43
        booksellerid => $self->{booksellerid},
44
        pending => 1
45
    });
40
    is( scalar @$orders, 1, 'we successfully entered one order.' );
46
    is( scalar @$orders, 1, 'we successfully entered one order.' );
41
47
42
    my @expectedfields = qw( basketno
48
    my @expectedfields = qw( basketno
43
- 

Return to bug 10124