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

(-)a/C4/Biblio.pm (-21 lines)
Lines 103-109 BEGIN { Link Here
103
103
104
      &CountItemsIssued
104
      &CountItemsIssued
105
      &CountBiblioInOrders
105
      &CountBiblioInOrders
106
      &GetSubscriptionsId
107
    );
106
    );
108
107
109
    # To modify something
108
    # To modify something
Lines 3507-3532 sub CountBiblioInOrders { Link Here
3507
    return ($count);
3506
    return ($count);
3508
}
3507
}
3509
3508
3510
=head2 GetSubscriptionsId
3511
3512
    $subscriptions = &GetSubscriptionsId($biblionumber);
3513
3514
This function return an array of subscriptionid with $biblionumber
3515
3516
=cut
3517
3518
sub GetSubscriptionsId {
3519
 my ($biblionumber) = @_;
3520
    my $dbh            = C4::Context->dbh;
3521
    my $query          = "SELECT subscriptionid
3522
          FROM  subscription
3523
          WHERE biblionumber=?";
3524
    my $sth = $dbh->prepare($query);
3525
    $sth->execute($biblionumber);
3526
    my @subscriptions = $sth->fetchrow_array;
3527
    return (@subscriptions);
3528
}
3529
3530
=head2 prepare_host_field
3509
=head2 prepare_host_field
3531
3510
3532
$marcfield = prepare_host_field( $hostbiblioitem, $marcflavour );
3511
$marcfield = prepare_host_field( $hostbiblioitem, $marcflavour );
(-)a/acqui/basket.pl (-323 / +322 lines)
Lines 47-55 basket.pl Link Here
47
47
48
=head1 DESCRIPTION
48
=head1 DESCRIPTION
49
49
50
 This script display all informations about basket for the supplier given
50
This script display all informations about basket for the supplier given
51
 on input arg.  Moreover, it allows us to add a new order for this supplier from
51
on input arg.  Moreover, it allows us to add a new order for this supplier from
52
 an existing record, a suggestion or a new record.
52
an existing record, a suggestion or a new record.
53
53
54
=head1 CGI PARAMETERS
54
=head1 CGI PARAMETERS
55
55
Lines 76-89 our $booksellerid = $query->param('booksellerid'); Link Here
76
my $duplinbatch =  $query->param('duplinbatch');
76
my $duplinbatch =  $query->param('duplinbatch');
77
77
78
our ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user(
78
our ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user(
79
    {
79
{
80
        template_name   => "acqui/basket.tt",
80
    template_name   => "acqui/basket.tt",
81
        query           => $query,
81
    query           => $query,
82
        type            => "intranet",
82
    type            => "intranet",
83
        authnotrequired => 0,
83
    authnotrequired => 0,
84
        flagsrequired   => { acquisition => 'order_manage' },
84
    flagsrequired   => { acquisition => 'order_manage' },
85
        debug           => 1,
85
    debug           => 1,
86
    }
86
}
87
);
87
);
88
88
89
our $basket = GetBasket($basketno);
89
our $basket = GetBasket($basketno);
Lines 91-109 $booksellerid = $basket->{booksellerid} unless $booksellerid; Link Here
91
my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid );
91
my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid );
92
my $schema = Koha::Database->new()->schema();
92
my $schema = Koha::Database->new()->schema();
93
my $rs = $schema->resultset('VendorEdiAccount')->search(
93
my $rs = $schema->resultset('VendorEdiAccount')->search(
94
    { vendor_id => $booksellerid, } );
94
{ vendor_id => $booksellerid, } );
95
$template->param( ediaccount => ($rs->count > 0));
95
$template->param( ediaccount => ($rs->count > 0));
96
96
97
unless (CanUserManageBasket($loggedinuser, $basket, $userflags)) {
97
unless (CanUserManageBasket($loggedinuser, $basket, $userflags)) {
98
    $template->param(
98
$template->param(
99
        cannot_manage_basket => 1,
99
    cannot_manage_basket => 1,
100
        basketno => $basketno,
100
    basketno => $basketno,
101
        basketname => $basket->{basketname},
101
    basketname => $basket->{basketname},
102
        booksellerid => $booksellerid,
102
    booksellerid => $booksellerid,
103
        name => $bookseller->name,
103
    name => $bookseller->name,
104
    );
104
);
105
    output_html_with_http_headers $query, $cookie, $template->output;
105
output_html_with_http_headers $query, $cookie, $template->output;
106
    exit;
106
exit;
107
}
107
}
108
108
109
# FIXME : what about the "discount" percentage?
109
# FIXME : what about the "discount" percentage?
Lines 118-493 $template->param( skip_confirm_reopen => 1) if $confirm_pref eq '2'; Link Here
118
my @messages;
118
my @messages;
119
119
120
if ( $op eq 'delete_confirm' ) {
120
if ( $op eq 'delete_confirm' ) {
121
    my $basketno = $query->param('basketno');
121
my $basketno = $query->param('basketno');
122
    my $delbiblio = $query->param('delbiblio');
122
my $delbiblio = $query->param('delbiblio');
123
    my @orders = GetOrders($basketno);
123
my @orders = GetOrders($basketno);
124
#Delete all orders included in that basket, and all items received.
124
#Delete all orders included in that basket, and all items received.
125
    foreach my $myorder (@orders){
125
foreach my $myorder (@orders){
126
        DelOrder($myorder->{biblionumber},$myorder->{ordernumber});
126
    DelOrder($myorder->{biblionumber},$myorder->{ordernumber});
127
    }
127
}
128
# if $delbiblio = 1, delete the records if possible
128
# if $delbiblio = 1, delete the records if possible
129
    if ((defined $delbiblio)and ($delbiblio ==1)){
129
if ((defined $delbiblio)and ($delbiblio ==1)){
130
        my @cannotdelbiblios ;
130
    my @cannotdelbiblios ;
131
        foreach my $myorder (@orders){
131
    foreach my $myorder (@orders){
132
            my $biblionumber = $myorder->{'biblionumber'};
132
        my $biblionumber = $myorder->{'biblionumber'};
133
            my $biblio = Koha::Biblios->find( $biblionumber );
133
        my $biblio = Koha::Biblios->find( $biblionumber );
134
            my $countbiblio = CountBiblioInOrders($biblionumber);
134
        my $countbiblio = CountBiblioInOrders($biblionumber);
135
            my $ordernumber = $myorder->{'ordernumber'};
135
        my $ordernumber = $myorder->{'ordernumber'};
136
            my $subscriptions = scalar GetSubscriptionsId ($biblionumber);
136
        my $has_subscriptions = $biblio->subscriptions->count;
137
            my $itemcount = $biblio->items->count;
137
        my $itemcount = $biblio->items->count;
138
            my $error;
138
        my $error;
139
            if ($countbiblio == 0 && $itemcount == 0 && $subscriptions == 0) {
139
        if ($countbiblio == 0 && $itemcount == 0 && not $has_subscriptions ) {
140
                $error = DelBiblio($myorder->{biblionumber}) }
140
            $error = DelBiblio($myorder->{biblionumber}) }
141
            else {
141
        else {
142
                push @cannotdelbiblios, {biblionumber=> ($myorder->{biblionumber}),
142
            push @cannotdelbiblios, {biblionumber=> ($myorder->{biblionumber}),
143
                                         title=> $myorder->{'title'},
143
                                     title=> $myorder->{'title'},
144
                                         author=> $myorder->{'author'},
144
                                     author=> $myorder->{'author'},
145
                                         countbiblio=> $countbiblio,
145
                                     countbiblio=> $countbiblio,
146
                                         itemcount=>$itemcount,
146
                                     itemcount=>$itemcount,
147
                                         subscriptions=>$subscriptions};
147
                                     subscriptions => $has_subscriptions};
148
            }
148
        }
149
            if ($error) {
149
        if ($error) {
150
                push @cannotdelbiblios, {biblionumber=> ($myorder->{biblionumber}),
150
            push @cannotdelbiblios, {biblionumber=> ($myorder->{biblionumber}),
151
                                         title=> $myorder->{'title'},
151
                                     title=> $myorder->{'title'},
152
                                         author=> $myorder->{'author'},
152
                                     author=> $myorder->{'author'},
153
                                         othererror=> $error};
153
                                     othererror=> $error};
154
            }
155
        }
154
        }
156
        $template->param( cannotdelbiblios => \@cannotdelbiblios );
157
    }
155
    }
158
 # delete the basket
156
    $template->param( cannotdelbiblios => \@cannotdelbiblios );
159
    DelBasket($basketno,);
157
}
160
    $template->param(
158
# delete the basket
161
        delete_confirmed => 1,
159
DelBasket($basketno,);
162
        name => $bookseller->name,
160
$template->param(
163
        booksellerid => $booksellerid,
161
    delete_confirmed => 1,
164
    );
162
    name => $bookseller->name,
163
    booksellerid => $booksellerid,
164
);
165
} elsif ( !$bookseller ) {
165
} elsif ( !$bookseller ) {
166
    $template->param( NO_BOOKSELLER => 1 );
166
$template->param( NO_BOOKSELLER => 1 );
167
} elsif ($op eq 'export') {
167
} elsif ($op eq 'export') {
168
    print $query->header(
168
print $query->header(
169
        -type       => 'text/csv',
169
    -type       => 'text/csv',
170
        -attachment => 'basket' . $basket->{'basketno'} . '.csv',
170
    -attachment => 'basket' . $basket->{'basketno'} . '.csv',
171
    );
171
);
172
    print GetBasketAsCSV($query->param('basketno'), $query);
172
print GetBasketAsCSV($query->param('basketno'), $query);
173
    exit;
173
exit;
174
} elsif ($op eq 'email') {
174
} elsif ($op eq 'email') {
175
    my $err = eval {
175
my $err = eval {
176
        SendAlerts( 'orderacquisition', $query->param('basketno'), 'ACQORDER' );
176
    SendAlerts( 'orderacquisition', $query->param('basketno'), 'ACQORDER' );
177
    };
177
};
178
    if ( $@ ) {
178
if ( $@ ) {
179
        push @messages, { type => 'error', code => $@ };
179
    push @messages, { type => 'error', code => $@ };
180
    } elsif ( ref $err and exists $err->{error} ) {
180
} elsif ( ref $err and exists $err->{error} ) {
181
        push @messages, { type => 'error', code => $err->{error} };
181
    push @messages, { type => 'error', code => $err->{error} };
182
    } else {
182
} else {
183
        push @messages, { type => 'message', code => 'email_sent' };
183
    push @messages, { type => 'message', code => 'email_sent' };
184
    }
184
}
185
185
186
    $op = 'list';
186
$op = 'list';
187
} elsif ($op eq 'close') {
187
} elsif ($op eq 'close') {
188
    my $confirm = $query->param('confirm') || $confirm_pref eq '2';
188
my $confirm = $query->param('confirm') || $confirm_pref eq '2';
189
    if ($confirm) {
189
if ($confirm) {
190
        my $basketno = $query->param('basketno');
190
    my $basketno = $query->param('basketno');
191
        my $booksellerid = $query->param('booksellerid');
191
    my $booksellerid = $query->param('booksellerid');
192
        $basketno =~ /^\d+$/ and CloseBasket($basketno);
192
    $basketno =~ /^\d+$/ and CloseBasket($basketno);
193
        # if requested, create basket group, close it and attach the basket
193
    # if requested, create basket group, close it and attach the basket
194
        if ($query->param('createbasketgroup')) {
194
    if ($query->param('createbasketgroup')) {
195
            my $branchcode;
195
        my $branchcode;
196
            if(C4::Context->userenv and C4::Context->userenv->{'branch'}
196
        if(C4::Context->userenv and C4::Context->userenv->{'branch'}
197
              and C4::Context->userenv->{'branch'} ne "NO_LIBRARY_SET") {
197
          and C4::Context->userenv->{'branch'} ne "NO_LIBRARY_SET") {
198
                $branchcode = C4::Context->userenv->{'branch'};
198
            $branchcode = C4::Context->userenv->{'branch'};
199
            }
200
            my $basketgroupid = NewBasketgroup( { name => $basket->{basketname},
201
                            booksellerid => $booksellerid,
202
                            deliveryplace => $branchcode,
203
                            billingplace => $branchcode,
204
                            closed => 1,
205
                            });
206
            ModBasket( { basketno => $basketno,
207
                         basketgroupid => $basketgroupid } );
208
            print $query->redirect('/cgi-bin/koha/acqui/basketgroup.pl?booksellerid='.$booksellerid.'&closed=1');
209
        } else {
210
            print $query->redirect('/cgi-bin/koha/acqui/booksellers.pl?booksellerid=' . $booksellerid);
211
        }
199
        }
212
        exit;
200
        my $basketgroupid = NewBasketgroup( { name => $basket->{basketname},
201
                        booksellerid => $booksellerid,
202
                        deliveryplace => $branchcode,
203
                        billingplace => $branchcode,
204
                        closed => 1,
205
                        });
206
        ModBasket( { basketno => $basketno,
207
                     basketgroupid => $basketgroupid } );
208
        print $query->redirect('/cgi-bin/koha/acqui/basketgroup.pl?booksellerid='.$booksellerid.'&closed=1');
213
    } else {
209
    } else {
214
    $template->param(
210
        print $query->redirect('/cgi-bin/koha/acqui/booksellers.pl?booksellerid=' . $booksellerid);
215
        confirm_close   => "1",
216
        booksellerid    => $booksellerid,
217
        basketno        => $basket->{'basketno'},
218
        basketname      => $basket->{'basketname'},
219
        basketgroupname => $basket->{'basketname'},
220
    );
221
    }
211
    }
212
    exit;
213
} else {
214
$template->param(
215
    confirm_close   => "1",
216
    booksellerid    => $booksellerid,
217
    basketno        => $basket->{'basketno'},
218
    basketname      => $basket->{'basketname'},
219
    basketgroupname => $basket->{'basketname'},
220
);
221
}
222
} elsif ($op eq 'reopen') {
222
} elsif ($op eq 'reopen') {
223
    ReopenBasket($query->param('basketno'));
223
ReopenBasket($query->param('basketno'));
224
    print $query->redirect('/cgi-bin/koha/acqui/basket.pl?basketno='.$basket->{'basketno'})
224
print $query->redirect('/cgi-bin/koha/acqui/basket.pl?basketno='.$basket->{'basketno'})
225
}
225
}
226
elsif ( $op eq 'ediorder' ) {
226
elsif ( $op eq 'ediorder' ) {
227
    edi_close_and_order()
227
edi_close_and_order()
228
} elsif ( $op eq 'mod_users' ) {
228
} elsif ( $op eq 'mod_users' ) {
229
    my $basketusers_ids = $query->param('users_ids');
229
my $basketusers_ids = $query->param('users_ids');
230
    my @basketusers = split( /:/, $basketusers_ids );
230
my @basketusers = split( /:/, $basketusers_ids );
231
    ModBasketUsers($basketno, @basketusers);
231
ModBasketUsers($basketno, @basketusers);
232
    print $query->redirect("/cgi-bin/koha/acqui/basket.pl?basketno=$basketno");
232
print $query->redirect("/cgi-bin/koha/acqui/basket.pl?basketno=$basketno");
233
    exit;
233
exit;
234
} elsif ( $op eq 'mod_branch' ) {
234
} elsif ( $op eq 'mod_branch' ) {
235
    my $branch = $query->param('branch');
235
my $branch = $query->param('branch');
236
    $branch = undef if(defined $branch and $branch eq '');
236
$branch = undef if(defined $branch and $branch eq '');
237
    ModBasket({
237
ModBasket({
238
        basketno => $basket->{basketno},
238
    basketno => $basket->{basketno},
239
        branch   => $branch
239
    branch   => $branch
240
    });
240
});
241
    print $query->redirect("/cgi-bin/koha/acqui/basket.pl?basketno=$basketno");
241
print $query->redirect("/cgi-bin/koha/acqui/basket.pl?basketno=$basketno");
242
    exit;
242
exit;
243
}
243
}
244
244
245
if ( $op eq 'list' ) {
245
if ( $op eq 'list' ) {
246
    my @branches_loop;
246
my @branches_loop;
247
    # get librarian branch...
247
# get librarian branch...
248
    if ( C4::Context->preference("IndependentBranches") ) {
248
if ( C4::Context->preference("IndependentBranches") ) {
249
        my $userenv = C4::Context->userenv;
249
    my $userenv = C4::Context->userenv;
250
        unless ( C4::Context->IsSuperLibrarian() ) {
250
    unless ( C4::Context->IsSuperLibrarian() ) {
251
            my $validtest = ( $basket->{creationdate} eq '' )
251
        my $validtest = ( $basket->{creationdate} eq '' )
252
              || ( $userenv->{branch} eq $basket->{branch} )
252
          || ( $userenv->{branch} eq $basket->{branch} )
253
              || ( $userenv->{branch} eq '' )
253
          || ( $userenv->{branch} eq '' )
254
              || ( $basket->{branch}  eq '' );
254
          || ( $basket->{branch}  eq '' );
255
            unless ($validtest) {
255
        unless ($validtest) {
256
                print $query->redirect("../mainpage.pl");
256
            print $query->redirect("../mainpage.pl");
257
                exit 0;
257
            exit 0;
258
            }
259
        }
258
        }
259
    }
260
260
261
        if (!defined $basket->{branch} or $basket->{branch} eq $userenv->{branch}) {
261
    if (!defined $basket->{branch} or $basket->{branch} eq $userenv->{branch}) {
262
            push @branches_loop, {
262
        push @branches_loop, {
263
                branchcode => $userenv->{branch},
263
            branchcode => $userenv->{branch},
264
                branchname => $userenv->{branchname},
264
            branchname => $userenv->{branchname},
265
                selected => 1,
265
            selected => 1,
266
            };
266
        };
267
        }
267
    }
268
    } else {
268
} else {
269
        # get branches
269
    # get branches
270
        my $branches = Koha::Libraries->search( {}, { order_by => ['branchname'] } )->unblessed;
270
    my $branches = Koha::Libraries->search( {}, { order_by => ['branchname'] } )->unblessed;
271
        foreach my $branch (@$branches) {
271
    foreach my $branch (@$branches) {
272
            my $selected = 0;
272
        my $selected = 0;
273
            if (defined $basket->{branch}) {
273
        if (defined $basket->{branch}) {
274
                $selected = 1 if $branch->{branchcode} eq $basket->{branch};
274
            $selected = 1 if $branch->{branchcode} eq $basket->{branch};
275
            } else {
275
        } else {
276
                $selected = 1 if $branch->{branchcode} eq C4::Context->userenv->{branch};
276
            $selected = 1 if $branch->{branchcode} eq C4::Context->userenv->{branch};
277
            }
278
            push @branches_loop, {
279
                branchcode => $branch->{branchcode},
280
                branchname => $branch->{branchname},
281
                selected => $selected
282
            };
283
        }
277
        }
278
        push @branches_loop, {
279
            branchcode => $branch->{branchcode},
280
            branchname => $branch->{branchname},
281
            selected => $selected
282
        };
284
    }
283
    }
284
}
285
285
286
#if the basket is closed,and the user has the permission to edit basketgroups, display a list of basketgroups
286
#if the basket is closed,and the user has the permission to edit basketgroups, display a list of basketgroups
287
    my ($basketgroup, $basketgroups);
287
my ($basketgroup, $basketgroups);
288
    my $staffuser = GetMember(borrowernumber => $loggedinuser);
288
my $staffuser = GetMember(borrowernumber => $loggedinuser);
289
    if ($basket->{closedate} && haspermission($staffuser->{userid}, { acquisition => 'group_manage'} )) {
289
if ($basket->{closedate} && haspermission($staffuser->{userid}, { acquisition => 'group_manage'} )) {
290
        $basketgroups = GetBasketgroups($basket->{booksellerid});
290
    $basketgroups = GetBasketgroups($basket->{booksellerid});
291
        for my $bg ( @{$basketgroups} ) {
291
    for my $bg ( @{$basketgroups} ) {
292
            if ($basket->{basketgroupid} && $basket->{basketgroupid} == $bg->{id}){
292
        if ($basket->{basketgroupid} && $basket->{basketgroupid} == $bg->{id}){
293
                $bg->{default} = 1;
293
            $bg->{default} = 1;
294
                $basketgroup = $bg;
294
            $basketgroup = $bg;
295
            }
296
        }
295
        }
297
    }
296
    }
297
}
298
298
299
    # if the basket is closed, calculate estimated delivery date
299
# if the basket is closed, calculate estimated delivery date
300
    my $estimateddeliverydate;
300
my $estimateddeliverydate;
301
    if( $basket->{closedate} ) {
301
if( $basket->{closedate} ) {
302
        my ($year, $month, $day) = ($basket->{closedate} =~ /(\d+)-(\d+)-(\d+)/);
302
    my ($year, $month, $day) = ($basket->{closedate} =~ /(\d+)-(\d+)-(\d+)/);
303
        ($year, $month, $day) = Add_Delta_Days($year, $month, $day, $bookseller->deliverytime);
303
    ($year, $month, $day) = Add_Delta_Days($year, $month, $day, $bookseller->deliverytime);
304
        $estimateddeliverydate = sprintf( "%04d-%02d-%02d", $year, $month, $day );
304
    $estimateddeliverydate = sprintf( "%04d-%02d-%02d", $year, $month, $day );
305
    }
305
}
306
306
307
    # if new basket, pre-fill infos
307
# if new basket, pre-fill infos
308
    $basket->{creationdate} = ""            unless ( $basket->{creationdate} );
308
$basket->{creationdate} = ""            unless ( $basket->{creationdate} );
309
    $basket->{authorisedby} = $loggedinuser unless ( $basket->{authorisedby} );
309
$basket->{authorisedby} = $loggedinuser unless ( $basket->{authorisedby} );
310
    $debug
310
$debug
311
      and warn sprintf
311
  and warn sprintf
312
      "loggedinuser: $loggedinuser; creationdate: %s; authorisedby: %s",
312
  "loggedinuser: $loggedinuser; creationdate: %s; authorisedby: %s",
313
      $basket->{creationdate}, $basket->{authorisedby};
313
  $basket->{creationdate}, $basket->{authorisedby};
314
314
315
    my @basketusers_ids = GetBasketUsers($basketno);
315
my @basketusers_ids = GetBasketUsers($basketno);
316
    my @basketusers;
316
my @basketusers;
317
    foreach my $basketuser_id (@basketusers_ids) {
317
foreach my $basketuser_id (@basketusers_ids) {
318
        my $basketuser = GetMember(borrowernumber => $basketuser_id);
318
    my $basketuser = GetMember(borrowernumber => $basketuser_id);
319
        push @basketusers, $basketuser if $basketuser;
319
    push @basketusers, $basketuser if $basketuser;
320
    }
320
}
321
321
322
    my $active_currency = Koha::Acquisition::Currencies->get_active;
322
my $active_currency = Koha::Acquisition::Currencies->get_active;
323
323
324
    my @orders = GetOrders( $basketno );
324
my @orders = GetOrders( $basketno );
325
    my @books_loop;
325
my @books_loop;
326
326
327
    my @book_foot_loop;
327
my @book_foot_loop;
328
    my %foot;
328
my %foot;
329
    my $total_quantity = 0;
329
my $total_quantity = 0;
330
    my $total_tax_excluded = 0;
330
my $total_tax_excluded = 0;
331
    my $total_tax_included = 0;
331
my $total_tax_included = 0;
332
    my $total_tax_value = 0;
332
my $total_tax_value = 0;
333
    for my $order (@orders) {
333
for my $order (@orders) {
334
        my $line = get_order_infos( $order, $bookseller);
334
    my $line = get_order_infos( $order, $bookseller);
335
        if ( $line->{uncertainprice} ) {
335
    if ( $line->{uncertainprice} ) {
336
            $template->param( uncertainprices => 1 );
336
        $template->param( uncertainprices => 1 );
337
        }
337
    }
338
338
339
        $line->{tax_rate} = $line->{tax_rate_on_ordering};
339
    $line->{tax_rate} = $line->{tax_rate_on_ordering};
340
        $line->{tax_value} = $line->{tax_value_on_ordering};
340
    $line->{tax_value} = $line->{tax_value_on_ordering};
341
341
342
        push @books_loop, $line;
342
    push @books_loop, $line;
343
343
344
        $foot{$$line{tax_rate}}{tax_rate} = $$line{tax_rate};
344
    $foot{$$line{tax_rate}}{tax_rate} = $$line{tax_rate};
345
        $foot{$$line{tax_rate}}{tax_value} += $$line{tax_value};
345
    $foot{$$line{tax_rate}}{tax_value} += $$line{tax_value};
346
        $total_tax_value += $$line{tax_value};
346
    $total_tax_value += $$line{tax_value};
347
        $foot{$$line{tax_rate}}{quantity}  += $$line{quantity};
347
    $foot{$$line{tax_rate}}{quantity}  += $$line{quantity};
348
        $total_quantity += $$line{quantity};
348
    $total_quantity += $$line{quantity};
349
        $foot{$$line{tax_rate}}{total_tax_excluded} += $$line{total_tax_excluded};
349
    $foot{$$line{tax_rate}}{total_tax_excluded} += $$line{total_tax_excluded};
350
        $total_tax_excluded += $$line{total_tax_excluded};
350
    $total_tax_excluded += $$line{total_tax_excluded};
351
        $foot{$$line{tax_rate}}{total_tax_included} += $$line{total_tax_included};
351
    $foot{$$line{tax_rate}}{total_tax_included} += $$line{total_tax_included};
352
        $total_tax_included += $$line{total_tax_included};
352
    $total_tax_included += $$line{total_tax_included};
353
    }
353
}
354
354
355
    push @book_foot_loop, map {$_} values %foot;
355
push @book_foot_loop, map {$_} values %foot;
356
356
357
    # Get cancelled orders
357
# Get cancelled orders
358
    my @cancelledorders = GetOrders($basketno, { cancelled => 1 });
358
my @cancelledorders = GetOrders($basketno, { cancelled => 1 });
359
    my @cancelledorders_loop;
359
my @cancelledorders_loop;
360
    for my $order (@cancelledorders) {
360
for my $order (@cancelledorders) {
361
        my $line = get_order_infos( $order, $bookseller);
361
    my $line = get_order_infos( $order, $bookseller);
362
        push @cancelledorders_loop, $line;
362
    push @cancelledorders_loop, $line;
363
    }
363
}
364
364
365
    my $contract = GetContract({
365
my $contract = GetContract({
366
        contractnumber => $basket->{contractnumber}
366
    contractnumber => $basket->{contractnumber}
367
    });
367
});
368
368
369
    if ($basket->{basketgroupid}){
369
if ($basket->{basketgroupid}){
370
        $basketgroup = GetBasketgroup($basket->{basketgroupid});
370
    $basketgroup = GetBasketgroup($basket->{basketgroupid});
371
}
372
my $borrower= GetMember('borrowernumber' => $loggedinuser);
373
my $budgets = GetBudgetHierarchy;
374
my $has_budgets = 0;
375
foreach my $r (@{$budgets}) {
376
    if (!defined $r->{budget_amount} || $r->{budget_amount} == 0) {
377
        next;
371
    }
378
    }
372
    my $borrower= GetMember('borrowernumber' => $loggedinuser);
379
    next unless (CanUserUseBudget($loggedinuser, $r, $userflags));
373
    my $budgets = GetBudgetHierarchy;
374
    my $has_budgets = 0;
375
    foreach my $r (@{$budgets}) {
376
        if (!defined $r->{budget_amount} || $r->{budget_amount} == 0) {
377
            next;
378
        }
379
        next unless (CanUserUseBudget($loggedinuser, $r, $userflags));
380
380
381
        $has_budgets = 1;
381
    $has_budgets = 1;
382
        last;
382
    last;
383
    }
383
}
384
384
385
    $template->param(
385
$template->param(
386
        basketno             => $basketno,
386
    basketno             => $basketno,
387
        basket               => $basket,
387
    basket               => $basket,
388
        basketname           => $basket->{'basketname'},
388
    basketname           => $basket->{'basketname'},
389
        basketbranchcode     => $basket->{branch},
389
    basketbranchcode     => $basket->{branch},
390
        basketnote           => $basket->{note},
390
    basketnote           => $basket->{note},
391
        basketbooksellernote => $basket->{booksellernote},
391
    basketbooksellernote => $basket->{booksellernote},
392
        basketcontractno     => $basket->{contractnumber},
392
    basketcontractno     => $basket->{contractnumber},
393
        basketcontractname   => $contract->{contractname},
393
    basketcontractname   => $contract->{contractname},
394
        branches_loop        => \@branches_loop,
394
    branches_loop        => \@branches_loop,
395
        creationdate         => $basket->{creationdate},
395
    creationdate         => $basket->{creationdate},
396
        authorisedby         => $basket->{authorisedby},
396
    authorisedby         => $basket->{authorisedby},
397
        authorisedbyname     => $basket->{authorisedbyname},
397
    authorisedbyname     => $basket->{authorisedbyname},
398
        users_ids            => join(':', @basketusers_ids),
398
    users_ids            => join(':', @basketusers_ids),
399
        users                => \@basketusers,
399
    users                => \@basketusers,
400
        closedate            => $basket->{closedate},
400
    closedate            => $basket->{closedate},
401
        estimateddeliverydate=> $estimateddeliverydate,
401
    estimateddeliverydate=> $estimateddeliverydate,
402
        is_standing          => $basket->{is_standing},
402
    is_standing          => $basket->{is_standing},
403
        deliveryplace        => $basket->{deliveryplace},
403
    deliveryplace        => $basket->{deliveryplace},
404
        billingplace         => $basket->{billingplace},
404
    billingplace         => $basket->{billingplace},
405
        active               => $bookseller->active,
405
    active               => $bookseller->active,
406
        booksellerid         => $bookseller->id,
406
    booksellerid         => $bookseller->id,
407
        name                 => $bookseller->name,
407
    name                 => $bookseller->name,
408
        books_loop           => \@books_loop,
408
    books_loop           => \@books_loop,
409
        book_foot_loop       => \@book_foot_loop,
409
    book_foot_loop       => \@book_foot_loop,
410
        cancelledorders_loop => \@cancelledorders_loop,
410
    cancelledorders_loop => \@cancelledorders_loop,
411
        total_quantity       => $total_quantity,
411
    total_quantity       => $total_quantity,
412
        total_tax_excluded   => $total_tax_excluded,
412
    total_tax_excluded   => $total_tax_excluded,
413
        total_tax_included   => $total_tax_included,
413
    total_tax_included   => $total_tax_included,
414
        total_tax_value      => $total_tax_value,
414
    total_tax_value      => $total_tax_value,
415
        currency             => $active_currency->currency,
415
    currency             => $active_currency->currency,
416
        listincgst           => $bookseller->listincgst,
416
    listincgst           => $bookseller->listincgst,
417
        basketgroups         => $basketgroups,
417
    basketgroups         => $basketgroups,
418
        basketgroup          => $basketgroup,
418
    basketgroup          => $basketgroup,
419
        grouped              => $basket->{basketgroupid},
419
    grouped              => $basket->{basketgroupid},
420
        # The double negatives and booleans here mean:
420
    # The double negatives and booleans here mean:
421
        # "A basket cannot be closed if there are no orders in it or it's a standing order basket."
421
    # "A basket cannot be closed if there are no orders in it or it's a standing order basket."
422
        #
422
    #
423
        # (The template has another implicit restriction that the order cannot be closed if there
423
    # (The template has another implicit restriction that the order cannot be closed if there
424
        # are any orders with uncertain prices.)
424
    # are any orders with uncertain prices.)
425
        unclosable           => @orders ? $basket->{is_standing} : 1,
425
    unclosable           => @orders ? $basket->{is_standing} : 1,
426
        has_budgets          => $has_budgets,
426
    has_budgets          => $has_budgets,
427
        duplinbatch          => $duplinbatch,
427
    duplinbatch          => $duplinbatch,
428
    );
428
);
429
}
429
}
430
430
431
$template->param( messages => \@messages );
431
$template->param( messages => \@messages );
432
output_html_with_http_headers $query, $cookie, $template->output;
432
output_html_with_http_headers $query, $cookie, $template->output;
433
433
434
sub get_order_infos {
434
sub get_order_infos {
435
    my $order = shift;
435
my $order = shift;
436
    my $bookseller = shift;
436
my $bookseller = shift;
437
    my $qty = $order->{'quantity'} || 0;
437
my $qty = $order->{'quantity'} || 0;
438
    if ( !defined $order->{quantityreceived} ) {
438
if ( !defined $order->{quantityreceived} ) {
439
        $order->{quantityreceived} = 0;
439
    $order->{quantityreceived} = 0;
440
    }
440
}
441
    my $budget = GetBudget($order->{budget_id});
441
my $budget = GetBudget($order->{budget_id});
442
    my $basket = GetBasket($order->{basketno});
442
my $basket = GetBasket($order->{basketno});
443
443
444
    my %line = %{ $order };
444
my %line = %{ $order };
445
    # Don't show unreceived standing orders as received
445
# Don't show unreceived standing orders as received
446
    $line{order_received} = ( $qty == $order->{'quantityreceived'} && ( $basket->{is_standing} ? $qty : 1 ) );
446
$line{order_received} = ( $qty == $order->{'quantityreceived'} && ( $basket->{is_standing} ? $qty : 1 ) );
447
    $line{basketno}       = $basketno;
447
$line{basketno}       = $basketno;
448
    $line{budget_name}    = $budget->{budget_name};
448
$line{budget_name}    = $budget->{budget_name};
449
449
450
    $line{total_tax_included} = $line{ecost_tax_included} * $line{quantity};
450
$line{total_tax_included} = $line{ecost_tax_included} * $line{quantity};
451
    $line{total_tax_excluded} = $line{ecost_tax_excluded} * $line{quantity};
451
$line{total_tax_excluded} = $line{ecost_tax_excluded} * $line{quantity};
452
    $line{tax_value} = $line{tax_value_on_ordering};
452
$line{tax_value} = $line{tax_value_on_ordering};
453
    $line{tax_rate} = $line{tax_rate_on_ordering};
453
$line{tax_rate} = $line{tax_rate_on_ordering};
454
454
455
    if ( $line{uncertainprice} ) {
455
if ( $line{uncertainprice} ) {
456
        $line{rrp_tax_excluded} .= ' (Uncertain)';
456
    $line{rrp_tax_excluded} .= ' (Uncertain)';
457
    }
457
}
458
    if ( $line{'title'} ) {
458
if ( $line{'title'} ) {
459
        my $volume      = $order->{'volume'};
459
    my $volume      = $order->{'volume'};
460
        my $seriestitle = $order->{'seriestitle'};
460
    my $seriestitle = $order->{'seriestitle'};
461
        $line{'title'} .= " / $seriestitle" if $seriestitle;
461
    $line{'title'} .= " / $seriestitle" if $seriestitle;
462
        $line{'title'} .= " / $volume"      if $volume;
462
    $line{'title'} .= " / $volume"      if $volume;
463
    }
463
}
464
464
465
    my $biblionumber = $order->{'biblionumber'};
465
my $biblionumber = $order->{'biblionumber'};
466
    if ( $biblionumber ) { # The biblio still exists
466
    if ( $biblionumber ) { # The biblio still exists
467
        my $biblio = Koha::Biblios->find( $biblionumber );
467
        my $biblio = Koha::Biblios->find( $biblionumber );
468
        my $countbiblio = CountBiblioInOrders($biblionumber);
468
        my $countbiblio = CountBiblioInOrders($biblionumber);
469
        my $ordernumber = $order->{'ordernumber'};
469
        my $ordernumber = $order->{'ordernumber'};
470
        my @subscriptions = GetSubscriptionsId ($biblionumber);
470
        my $has_subscriptions = $biblio->subscriptions->count;
471
        my $itemcount   = $biblio->items->count;
471
        my $itemcount   = $biblio->items->count;
472
        my $holds_count = $biblio->holds->count;
472
        my $holds_count = $biblio->holds->count;
473
        my @items = GetItemnumbersFromOrder( $ordernumber );
473
        my @items = GetItemnumbersFromOrder( $ordernumber );
474
        my $itemholds  = $biblio->holds->search({ itemnumber => { -in => \@items } })->count;
474
        my $itemholds  = $biblio->holds->search({ itemnumber => { -in => \@items } })->count;
475
475
476
        # if the biblio is not in other orders and if there is no items elsewhere and no subscriptions and no holds we can then show the link "Delete order and Biblio" see bug 5680
476
        # if the biblio is not in other orders and if there is no items elsewhere and no subscriptions and no holds we can then show the link "Delete order and Biblio" see bug 5680
477
        $line{can_del_bib}          = 1 if $countbiblio <= 1 && $itemcount == scalar @items && !(@subscriptions) && !($holds_count);
477
        $line{can_del_bib}          = 1 if $countbiblio <= 1 && $itemcount == scalar @items && !($has_subscriptions) && !($holds_count);
478
        $line{items}                = ($itemcount) - (scalar @items);
478
        $line{items}                = ($itemcount) - (scalar @items);
479
        $line{left_item}            = 1 if $line{items} >= 1;
479
        $line{left_item}            = 1 if $line{items} >= 1;
480
        $line{left_biblio}          = 1 if $countbiblio > 1;
480
        $line{left_biblio}          = 1 if $countbiblio > 1;
481
        $line{biblios}              = $countbiblio - 1;
481
        $line{biblios}              = $countbiblio - 1;
482
        $line{left_subscription}    = 1 if scalar @subscriptions >= 1;
482
        $line{left_subscription}    = 1 if $has_subscriptions;
483
        $line{subscriptions}        = scalar @subscriptions;
483
        $line{subscriptions}        = $has_subscriptions;
484
        ($holds_count >= 1) ? $line{left_holds} = 1 : $line{left_holds} = 0;
484
        ($holds_count >= 1) ? $line{left_holds} = 1 : $line{left_holds} = 0;
485
        $line{left_holds_on_order}  = 1 if $line{left_holds}==1 && ($line{items} == 0 || $itemholds );
485
        $line{left_holds_on_order}  = 1 if $line{left_holds}==1 && ($line{items} == 0 || $itemholds );
486
        $line{holds}                = $holds_count;
486
        $line{holds}                = $holds_count;
487
        $line{holds_on_order}       = $itemholds?$itemholds:$holds_count if $line{left_holds_on_order};
487
        $line{holds_on_order}       = $itemholds?$itemholds:$holds_count if $line{left_holds_on_order};
488
    }
488
    }
489
489
490
491
    my $suggestion   = GetSuggestionInfoFromBiblionumber($line{biblionumber});
490
    my $suggestion   = GetSuggestionInfoFromBiblionumber($line{biblionumber});
492
    $line{suggestionid}         = $$suggestion{suggestionid};
491
    $line{suggestionid}         = $$suggestion{suggestionid};
493
    $line{surnamesuggestedby}   = $$suggestion{surnamesuggestedby};
492
    $line{surnamesuggestedby}   = $$suggestion{surnamesuggestedby};
(-)a/acqui/parcel.pl (-5 / +4 lines)
Lines 241-247 unless( defined $invoice->{closedate} ) { Link Here
241
        my $biblio = Koha::Biblios->find( $biblionumber );
241
        my $biblio = Koha::Biblios->find( $biblionumber );
242
        my $countbiblio = CountBiblioInOrders($biblionumber);
242
        my $countbiblio = CountBiblioInOrders($biblionumber);
243
        my $ordernumber = $line{'ordernumber'};
243
        my $ordernumber = $line{'ordernumber'};
244
        my @subscriptions = GetSubscriptionsId ($biblionumber);
244
        my $has_subscriptions = $biblio->subscriptions->count;
245
        my $itemcount   = $biblio->items->count;
245
        my $itemcount   = $biblio->items->count;
246
        my $holds_count = $biblio->holds->count;
246
        my $holds_count = $biblio->holds->count;
247
        my @items = GetItemnumbersFromOrder( $ordernumber );
247
        my @items = GetItemnumbersFromOrder( $ordernumber );
Lines 253-265 unless( defined $invoice->{closedate} ) { Link Here
253
        $line{firstnamesuggestedby} = $suggestion->{firstnamesuggestedby};
253
        $line{firstnamesuggestedby} = $suggestion->{firstnamesuggestedby};
254
254
255
        # if the biblio is not in other orders and if there is no items elsewhere and no subscriptions and no holds we can then show the link "Delete order and Biblio" see bug 5680
255
        # if the biblio is not in other orders and if there is no items elsewhere and no subscriptions and no holds we can then show the link "Delete order and Biblio" see bug 5680
256
        $line{can_del_bib}          = 1 if $countbiblio <= 1 && $itemcount == scalar @items && !(@subscriptions) && !($holds_count);
256
        $line{can_del_bib}          = 1 if $countbiblio <= 1 && $itemcount == scalar @items && !($has_subscriptions) && !($holds_count);
257
        $line{items}                = ($itemcount) - (scalar @items);
257
        $line{items}                = ($itemcount) - (scalar @items);
258
        $line{left_item}            = 1 if $line{items} >= 1;
258
        $line{left_item}            = 1 if $line{items} >= 1;
259
        $line{left_biblio}          = 1 if $countbiblio > 1;
259
        $line{left_biblio}          = 1 if $countbiblio > 1;
260
        $line{biblios}              = $countbiblio - 1;
260
        $line{biblios}              = $countbiblio - 1;
261
        $line{left_subscription}    = 1 if scalar @subscriptions >= 1;
261
        $line{left_subscription}    = 1 if $has_subscriptions;
262
        $line{subscriptions}        = scalar @subscriptions;
262
        $line{subscriptions}        = $has_subscriptions;
263
        $line{left_holds}           = ($holds_count >= 1) ? 1 : 0;
263
        $line{left_holds}           = ($holds_count >= 1) ? 1 : 0;
264
        $line{left_holds_on_order}  = 1 if $line{left_holds}==1 && ($line{items} == 0 || $itemholds );
264
        $line{left_holds_on_order}  = 1 if $line{left_holds}==1 && ($line{items} == 0 || $itemholds );
265
        $line{holds}                = $holds_count;
265
        $line{holds}                = $holds_count;
266
- 

Return to bug 18259