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

(-)a/C4/Acquisition.pm (+34 lines)
Lines 44-49 BEGIN { Link Here
44
        &GetBasket &NewBasket &CloseBasket &DelBasket &ModBasket
44
        &GetBasket &NewBasket &CloseBasket &DelBasket &ModBasket
45
	&GetBasketAsCSV
45
	&GetBasketAsCSV
46
        &GetBasketsByBookseller &GetBasketsByBasketgroup
46
        &GetBasketsByBookseller &GetBasketsByBasketgroup
47
        &GetBasketsInfosByBookseller
47
48
48
        &ModBasketHeader
49
        &ModBasketHeader
49
50
Lines 461-466 sub GetBasketsByBookseller { Link Here
461
    return $results
462
    return $results
462
}
463
}
463
464
465
=head3 GetBasketsInfosByBookseller
466
467
    my $baskets = GetBasketsInfosByBookseller($supplierid);
468
469
Returns in a arrayref of hashref all about booksellers baskets, plus:
470
    total_biblios: Number of distinct biblios in basket
471
    total_items: Number of items in basket
472
    expected_items: Number of non-received items in basket
473
474
=cut
475
476
sub GetBasketsInfosByBookseller {
477
    my ($supplierid) = @_;
478
479
    return unless $supplierid;
480
481
    my $dbh = C4::Context->dbh;
482
    my $query = qq{
483
        SELECT aqbasket.*,
484
          SUM(aqorders.quantity) AS total_items,
485
          COUNT(DISTINCT aqorders.biblionumber) AS total_biblios,
486
          SUM(IF(aqorders.datereceived IS NULL, aqorders.quantity, 0)) AS expected_items
487
        FROM aqbasket
488
          LEFT JOIN aqorders ON aqorders.basketno = aqbasket.basketno
489
        WHERE booksellerid = ?
490
        GROUP BY aqbasket.basketno
491
    };
492
    my $sth = $dbh->prepare($query);
493
    $sth->execute($supplierid);
494
    return $sth->fetchall_arrayref({});
495
}
496
497
464
#------------------------------------------------------------#
498
#------------------------------------------------------------#
465
499
466
=head3 GetBasketsByBasketgroup
500
=head3 GetBasketsByBasketgroup
(-)a/acqui/booksellers.pl (-21 / +15 lines)
Lines 57-62 use C4::Output; Link Here
57
use CGI;
57
use CGI;
58
58
59
use C4::Dates qw/format_date/;
59
use C4::Dates qw/format_date/;
60
use C4::Acquisition qw/ GetBasketsInfosByBookseller /;
60
use C4::Bookseller qw/ GetBookSellerFromId GetBookSeller /;
61
use C4::Bookseller qw/ GetBookSellerFromId GetBookSeller /;
61
use C4::Members qw/GetMember/;
62
use C4::Members qw/GetMember/;
62
use C4::Context;
63
use C4::Context;
Lines 105-122 my $userbranch = $userenv->{branch}; Link Here
105
my $loop_suppliers = [];
106
my $loop_suppliers = [];
106
107
107
for my $vendor (@suppliers) {
108
for my $vendor (@suppliers) {
108
    my $baskets = get_vendors_baskets( $vendor->{id} );
109
    my $baskets = GetBasketsInfosByBookseller( $vendor->{id} );
109
110
110
    my $loop_basket = [];
111
    my $loop_basket = [];
111
    
112
112
    for my $basket ( @{$baskets} ) {
113
    for my $basket ( @{$baskets} ) {
113
        my $authorisedby = $basket->{authorisedby};
114
        my $authorisedby = $basket->{authorisedby};
114
        my $basketbranch = ''; # set a blank branch to start with
115
        my $basketbranch = ''; # set a blank branch to start with
115
        if ( GetMember( borrowernumber => $authorisedby ) ) {
116
        my $member = GetMember( borrowernumber => $authorisedby );
116
           # authorisedby may not be a valid borrowernumber; it's not foreign-key constrained!
117
        if ( $member ) {
117
           $basketbranch = GetMember( borrowernumber => $authorisedby )->{branchcode};
118
           $basketbranch = $member->{branchcode};
118
        }
119
        }
119
        
120
120
        if ($userenv->{'flags'} & 1 || #user is superlibrarian
121
        if ($userenv->{'flags'} & 1 || #user is superlibrarian
121
               (haspermission( $uid, { acquisition => q{*} } ) && #user has acq permissions and
122
               (haspermission( $uid, { acquisition => q{*} } ) && #user has acq permissions and
122
                   ($viewbaskets eq 'all' || #user is allowed to see all baskets
123
                   ($viewbaskets eq 'all' || #user is allowed to see all baskets
Lines 130-135 for my $vendor (@suppliers) { Link Here
130
                    $basket->{$date_field} = format_date( $basket->{$date_field} );
131
                    $basket->{$date_field} = format_date( $basket->{$date_field} );
131
                }
132
                }
132
            }
133
            }
134
            foreach (qw(total_items total_biblios expected_items)) {
135
                $basket->{$_} ||= 0;
136
            }
137
            if($member) {
138
                $basket->{authorisedby_firstname} = $member->{firstname};
139
                $basket->{authorisedby_surname} = $member->{surname};
140
            }
133
            push @{$loop_basket}, $basket; 
141
            push @{$loop_basket}, $basket; 
134
        }
142
        }
135
    }
143
    }
Lines 146-166 $template->param( Link Here
146
    loop_suppliers => $loop_suppliers,
154
    loop_suppliers => $loop_suppliers,
147
    supplier       => ( $id || $supplier ),
155
    supplier       => ( $id || $supplier ),
148
    count          => $supplier_count,
156
    count          => $supplier_count,
157
    dateformat     => C4::Context->preference('dateformat'),
149
);
158
);
150
159
151
output_html_with_http_headers $query, $cookie, $template->output;
160
output_html_with_http_headers $query, $cookie, $template->output;
152
153
sub get_vendors_baskets {
154
    my $supplier_id = shift;
155
    my $dbh         = C4::Context->dbh;
156
    my $sql         = <<'ENDSQL';
157
select aqbasket.*, count(*) as total,  borrowers.firstname, borrowers.surname
158
from aqbasket left join aqorders on aqorders.basketno = aqbasket.basketno
159
left join borrowers on aqbasket.authorisedby = borrowers.borrowernumber
160
where booksellerid = ?
161
AND ( aqorders.quantity > aqorders.quantityreceived OR quantityreceived IS NULL)
162
AND datecancellationprinted IS NULL
163
group by basketno
164
ENDSQL
165
    return $dbh->selectall_arrayref( $sql, { Slice => {} }, $supplier_id );
166
}
(-)a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css (+20 lines)
Lines 2133-2135 div.pager input.pagedisplay { Link Here
2133
	font-weight: bold;
2133
	font-weight: bold;
2134
	text-align : center;
2134
	text-align : center;
2135
}
2135
}
2136
2137
div#acqui_order_supplierlist > div.supplier {
2138
    border: 1px solid #EEEEEE;
2139
    margin: 0.5em;
2140
    padding: 1em;
2141
}
2142
2143
div#acqui_order_supplierlist > div.supplier > span.suppliername {
2144
    display: inline;
2145
    font-size: 1.7em;
2146
    margin-bottom: 0.5em;
2147
}
2148
2149
div#acqui_order_supplierlist > div.supplier > span.action {
2150
    margin-left: 5em;
2151
}
2152
2153
div#acqui_order_supplierlist > div.supplier > div.baskets {
2154
    margin-top: 0.5em;
2155
}
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/booksellers.tt (-86 / +92 lines)
Lines 6-24 Link Here
6
	vertical-align: top;
6
	vertical-align: top;
7
}
7
}
8
</style>
8
</style>
9
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.tablesorter.min.js"></script>
9
<link rel="stylesheet" href="[% themelang %]/css/datatables.css" />
10
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.dataTables.min.js"></script>
11
[% INCLUDE 'datatables-strings.inc' %]
12
<script type="text/javascript" src="[% themelang %]/js/datatables.js"></script>
10
<script type="text/javascript">
13
<script type="text/javascript">
11
//<![CDATA[
14
//<![CDATA[
12
 $(document).ready(function() {
15
$(document).ready(function() {
13
        $("#vendorst").tablesorter({
16
    [% IF (dateformat == 'metric') %]
14
	    headers: { 
17
        dt_add_type_uk_date();
15
		3: { 
18
    [% END %]
16
		    sorter: false 
19
    $("table.baskets").dataTable($.extend(true, {}, dataTablesDefaults, {
17
		}
20
        'bPaginate': false,
18
	    } 
21
        'bFilter': false,
19
	}); 
22
        'bInfo': false,
20
 }); 
23
        'aoColumnDefs': [
21
 //]]>
24
            { 'aTargets': [-1], 'bSortable': false }
25
        ]
26
    }));
27
});
28
//]]>
22
</script>
29
</script>
23
30
24
</head>
31
</head>
Lines 40-127 Link Here
40
[% ELSE %]
47
[% ELSE %]
41
<h1>You searched on <b>vendor [% supplier %],</b> [% count %] results found</h1>
48
<h1>You searched on <b>vendor [% supplier %],</b> [% count %] results found</h1>
42
[% END %]
49
[% END %]
43
[% IF ( loop_suppliers ) %]
50
[% IF ( loop_suppliers.size ) %]
51
    [% UNLESS (count == 1) %]
52
        <ul class="suppliers_anchors">
53
            [% FOREACH supplier IN loop_suppliers %]
54
                <li><a href="#[% supplier.supplierid %]">[% supplier.name %]</a></li>
55
            [% END %]
56
        </ul>
57
    [% END %]
44
    <div id="acqui_order_supplierlist">
58
    <div id="acqui_order_supplierlist">
45
        <table id="vendorst">
59
        [% FOREACH supplier IN loop_suppliers %]
46
	<thead>
60
            <div class="supplier">
47
        <tr>
61
                <span class="suppliername">
48
            <th>Order</th>
62
                    [% IF (supplier.name) %]
49
            <th>Order receive</th>
63
                        <a name="[% supplier.supplierid %]" href="/cgi-bin/koha/acqui/supplier.pl?supplierid=[% supplier.supplierid %]">[% supplier.name %]</a>
50
            <th>Vendor</th>
51
            <th>&nbsp;</th>
52
        </tr>
53
	</thead>
54
	<tbody> 
55
        [% FOREACH loop_supplier IN loop_suppliers %]
56
        [% UNLESS ( loop.odd ) %]
57
            <tr class="highlight">
58
        [% ELSE %]
59
            <tr>
60
        [% END %]
61
                <td>[% IF ( CAN_user_acquisition_order_manage ) %]
62
                    [% IF ( loop_supplier.active ) %]
63
                        <a href="basketheader.pl?booksellerid=[% loop_supplier.supplierid %]&amp;op=add_form">New basket</a>
64
                    [% ELSE %]
64
                    [% ELSE %]
65
                        Inactive
65
                        <a name="[% supplier.supplierid %]" href="/cgi-bin/koha/acqui/supplier.pl?supplierid=[% supplier.supplierid %]">NO NAME</a>
66
                    [% END %]
66
                    [% END %]
67
                </span>
68
                <span class="action">
69
                    [% IF ( CAN_user_acquisition_order_manage ) %]
70
                        [% IF ( supplier.active ) %]
71
                            <input type="button" value="New basket" onclick="window.location.href='/cgi-bin/koha/acqui/basketheader.pl?booksellerid=[% supplier.supplierid %]&op=add_form'" />
72
                        [% ELSE %]
73
                            (inactive)
74
                        [% END %]
67
                    [% END %]
75
                    [% END %]
68
                </td>
76
                    <input type="button" value="Receive shipment" onclick="window.location.href='/cgi-bin/koha/acqui/parcels.pl?supplierid=[% supplier.supplierid %]'" />
69
                <td>	<a href="parcels.pl?supplierid=[% loop_supplier.supplierid %]">Receive shipment</a>
77
                </span>
70
                </td>
78
                <div class="baskets">
71
                [% IF ( loop_supplier.name ) %]
79
                    [% IF ( supplier.loop_basket.size ) %]
72
                <td><a href="supplier.pl?supplierid=[% loop_supplier.supplierid %]">[% loop_supplier.name %]</a></td>
80
                        <table class="baskets">
73
                [% ELSE %]
81
                            <thead>
74
                <td><a href="supplier.pl?supplierid=[% loop_supplier.supplierid %]">NO NAME</a></td>
75
                [% END %]
76
                <td>	<table>
77
                        [% IF ( loop_supplier.loop_basket ) %]
78
                            <tr>
79
                                <th>Basket (#)</th>
80
                                <th>Items</th>
81
                                <th>Created by</th>
82
                                <th>Date</th>
83
                                <th>&nbsp;</th>
84
                            </tr>
85
                            [% FOREACH loop_baske IN loop_supplier.loop_basket %]
86
                            [% IF ( loop_baske.uncertainprices ) %]
87
                                <tr class="problem">
88
                            [% ELSE %]
89
                            [% UNLESS ( loop.odd ) %]
90
                                <tr class="highlight">
91
                            [% ELSE %]
92
                                <tr>
82
                                <tr>
93
                            [% END %]
83
                                    <th>Basket (#)</th>
94
                            [% END %]
84
                                    <th>Biblios</th>
95
                                    <td>[% loop_baske.basketname %] (#[% loop_baske.basketno %])</td>
85
                                    <th>Items</th>
96
                                    <td>[% loop_baske.total %]</td>
86
                                    <th>Expected items</th>
97
                                    <td>						[% loop_baske.firstname %]
87
                                    <th>Created by</th>
98
                                            [% loop_baske.surname %]
88
                                    <th>Date</th>
99
                                    </td>
89
                                    <th>&nbsp;</th>
100
                                    <td>[% loop_baske.creationdate %]</td>
90
                                </tr>
101
                                    <td>						[% IF ( loop_baske.closedate ) %]
91
                            </thead>
102
                                            closed on [% loop_baske.closedate %]
92
                            <tbody>
103
                                            <a href="/cgi-bin/koha/acqui/basket.pl?basketno=[% loop_baske.basketno %]">View</a>
93
                                [% FOREACH basket IN supplier.loop_basket %]
104
                                        [% ELSE %]
94
                                    [% IF ( basket.uncertainprices ) %]
105
                                            [% IF ( loop_baske.active ) %]
95
                                        <tr class="problem">
106
                                                <a href="/cgi-bin/koha/acqui/basket.pl?basketno=[% loop_baske.basketno %]">modify</a>
96
                                    [% ELSE %]
97
                                        <tr>
98
                                    [% END %]
99
                                        <td>[% basket.basketname %] (#[% basket.basketno %])</td>
100
                                        <td>[% basket.total_biblios %]</td>
101
                                        <td>[% basket.total_items %]</td>
102
                                        <td>[% basket.expected_items %]</td>
103
                                        <td>
104
                                            [% basket.authorisedby_firstname %]
105
                                            [% basket.authorisedby_surname %]
106
                                        </td>
107
                                        <td>[% basket.creationdate %]</td>
108
                                        <td>
109
                                            [% IF ( basket.closedate ) %]
110
                                                closed on [% basket.closedate %]
111
                                                <a href="/cgi-bin/koha/acqui/basket.pl?basketno=[% basket.basketno %]">View</a>
107
                                            [% ELSE %]
112
                                            [% ELSE %]
108
                                                <a href="/cgi-bin/koha/acqui/basket.pl?basketno=[% loop_baske.basketno %]">View</a>
113
                                                [% IF ( basket.active ) %]
114
                                                    <a href="/cgi-bin/koha/acqui/basket.pl?basketno=[% basket.basketno %]">Modify</a>
115
                                                [% ELSE %]
116
                                                    <a href="/cgi-bin/koha/acqui/basket.pl?basketno=[% basket.basketno %]">View</a>
117
                                                [% END %]
109
                                            [% END %]
118
                                            [% END %]
110
                                        [% END %]
119
                                        </td>
111
                                    </td>
120
                                    </tr>
112
                                </tr>
121
                                [% END %][%# FOREACH basket IN supplier.loop_basket %]
113
                            [% END %]
122
                            </tbody>
114
                        [% ELSE %]
115
                            <tr><td>No pending baskets</td></tr>
116
                        [% END %]
117
                        </table>
123
                        </table>
118
                </td>
124
                    [% ELSE %]
119
                </tr>
125
                        <p>No pending baskets</p>
120
            [% END %]
126
                    [% END %][%# IF ( supplier.loop_basket.size ) %]
121
	    </tbody>
127
                </div>
122
            </table>
128
            </div>
123
        </div>
129
        [% END %][%# FOREACH supplier IN loop_suppliers %]
124
    [% END %]
130
    </div>
131
[% END %][%# IF ( loop_suppliers.size ) %]
125
</div>
132
</div>
126
</div>
133
</div>
127
<div class="yui-b">
134
<div class="yui-b">
128
- 

Return to bug 7169