$sth->finish;
delete $order->{'ordernumber'};
+ $order->{'budget_id'} = ( $budget_id || $order->{'budget_id'} );
$order->{'quantity'} = $quantrec;
$order->{'quantityreceived'} = $quantrec;
$order->{'datereceived'} = $datereceived;
} else {
$sth=$dbh->prepare("update aqorders
set quantityreceived=?,datereceived=?,invoiceid=?,
- unitprice=?,rrp=?,ecost=?
+ unitprice=?,rrp=?,ecost=?,budget_id=?
where biblionumber=? and ordernumber=?");
- $sth->execute($quantrec,$datereceived,$invoiceid,$cost,$rrp,$ecost,$biblionumber,$ordernumber);
+ $sth->execute($quantrec,$datereceived,$invoiceid,$cost,$rrp,$ecost,$budget_id,$biblionumber,$ordernumber);
$sth->finish;
}
return ($datereceived, $new_ordernumber);
## supposed to be a hash of simple values, hashes of arrays could be implemented
$filter_input->{$field}=format_date_in_iso($filter_input->{$field})
if $columns->{$field}{Type}=~/date/ &&
- $filter_input->{$field} !~C4::Dates->regexp("iso");
+ ($filter_input->{$field} && $filter_input->{$field} !~C4::Dates->regexp("iso"));
my ($tmpkeys, $localvalues)=_Process_Operands($filter_input->{$field},"$tablename.$field",$searchtype,$columns);
if (@$tmpkeys){
push @values, @$localvalues;
my $ecost = $input->param('ecost');
my $rrp = $input->param('rrp');
my $note = $input->param("note");
+my $bookfund = $input->param("bookfund");
my $order = GetOrder($ordernumber);
#need old recievedate if we update the order, parcel.pl only shows the right parcel this way FIXME
$order->{ecost},
$invoiceid,
$order->{rrp},
- undef,
+ $bookfund,
$datereceived,
\@received_items,
);
use C4::Output;
use C4::Dates qw/format_date/;
use C4::Bookseller qw/ GetBookSellerFromId /;
-use C4::Budgets qw/ GetBudget /;
+use C4::Budgets qw/ GetBudget GetBudgetHierarchy CanUserUseBudget GetBudgetPeriods /;
use C4::Members;
use C4::Branch; # GetBranches
use C4::Items;
ordernumber => $ordernumber
}) if $ordernumber;
-my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user(
{
template_name => "acqui/orderreceive.tmpl",
query => $input,
firstnamesuggestedby => $suggestion->{firstnamesuggestedby},
);
+my $borrower = GetMember( 'borrowernumber' => $loggedinuser );
+my @budget_loop;
+my $periods = GetBudgetPeriods( { 'budget_period_active' => 1 } );
+foreach my $period (@$periods) {
+ my $budget_hierarchy = GetBudgetHierarchy( $period->{'budget_period_id'} );
+ my @funds;
+ foreach my $r ( @{$budget_hierarchy} ) {
+ next unless ( CanUserUseBudget( $borrower, $r, $userflags ) );
+ if ( !defined $r->{budget_amount} || $r->{budget_amount} == 0 ) {
+ next;
+ }
+ push @funds,
+ {
+ b_id => $r->{budget_id},
+ b_txt => $r->{budget_name},
+ b_sel => ( $r->{budget_id} == $order->{budget_id} ) ? 1 : 0,
+ };
+ }
+
+ @funds = sort { uc( $a->{b_txt} ) cmp uc( $b->{b_txt} ) } @funds;
+
+ push @budget_loop,
+ {
+ 'id' => $period->{'budget_period_id'},
+ 'description' => $period->{'budget_period_description'},
+ 'funds' => \@funds
+ };
+}
+
+$template->{'VARS'}->{'budget_loop'} = \@budget_loop;
+
# regardless of the content of $unitprice e.g 0 or '' or any string will return in these cases 0.00
# and the 'IF' in the .tt will show 0.00 and not 'ecost' (see BZ 7129)
# So if $unitprice == 0 we don't create unitprice
<legend>Accounting details</legend>
<ol>
<li><label for="datereceived">Date received: </label><span> [% datereceived %] </span></li>
- <li><label for="bookfund">Budget: </label><span> [% bookfund %] </span></li>
+ <li><label for="bookfund">Fund: </label><select id="bookfund" name="bookfund">
+ <option value="">Keep current ([% bookfund %])</option>
+ [% FOREACH period IN budget_loop %]
+ <optgroup label="[% period.description %]">
+ [% FOREACH fund IN period.funds %]
+ [% IF ( fund.b_sel ) %]
+ <option value="[% fund.b_id %]" selected="selected">[% fund.b_txt %]</option>
+ [% ELSE %]
+ <option value="[% fund.b_id %]">[% fund.b_txt %]</option>
+ [% END %]
+ [% END %]
+ [% END %]
+ </select> (Current: [% bookfund %])</li>
<li><label for="creator">Created by: </label><span> [% IF ( memberfirstname and membersurname ) %][% IF ( memberfirstname ) %][% memberfirstname %][% END %] [% membersurname %][% ELSE %]No name[% END %]</span></li>
<li><label for="quantity_to_receive">Quantity to receive: </label><span class="label">
[% IF ( edit and not subscriptionid) %]
use C4::Bookseller qw( GetBookSellerFromId );
-use Test::More tests => 44;
+use Test::More tests => 59;
BEGIN {
use_ok('C4::Acquisition');
});
is(scalar(@$allorders), 3, 'retrieved all 3 orders even after after receiving on one (bug 10723)');
+my $invoiceid = AddInvoice(invoicenumber => 'invoice', booksellerid => 1, unknown => "unknown");
+
+my ($datereceived, $new_ordernumber) = ModReceiveOrder(
+ $biblionumber2,
+ $ordernumber2,
+ 2,
+ undef,
+ 12,
+ 12,
+ $invoiceid,
+ 42,
+ );
+my $order2 = GetOrder( $ordernumber2 );
+is($order2->{'quantityreceived'}, 0, 'Splitting up order did not receive any on original order');
+is($order2->{'quantity'}, 40, '40 items on original order');
+is($order2->{'budget_id'}, $budgetid, 'Budget on original order is unchanged');
+
+$neworder = GetOrder( $new_ordernumber );
+is($neworder->{'quantity'}, 2, '2 items on new order');
+is($neworder->{'quantityreceived'}, 2, 'Splitting up order received items on new order');
+is($neworder->{'budget_id'}, $budgetid, 'Budget on new order is unchanged');
+
+my $budgetid2 = C4::Budgets::AddBudget(
+ {
+ budget_code => "budget_code_test_modrecv",
+ budget_name => "budget_name_test_modrecv",
+ }
+);
+
+($datereceived, $new_ordernumber) = ModReceiveOrder(
+ $biblionumber2,
+ $ordernumber3,
+ 2,
+ undef,
+ 12,
+ 12,
+ $invoiceid,
+ 42,
+ $budgetid2
+ );
+
+my $order3 = GetOrder( $ordernumber3 );
+is($order3->{'quantityreceived'}, 0, 'Splitting up order did not receive any on original order');
+is($order3->{'quantity'}, 2, '2 items on original order');
+is($order3->{'budget_id'}, $budgetid, 'Budget on original order is unchanged');
+
+$neworder = GetOrder( $new_ordernumber );
+is($neworder->{'quantity'}, 2, '2 items on new order');
+is($neworder->{'quantityreceived'}, 2, 'Splitting up order received items on new order');
+is($neworder->{'budget_id'}, $budgetid2, 'Budget on new order is changed');
+
+($datereceived, $new_ordernumber) = ModReceiveOrder(
+ $biblionumber2,
+ $ordernumber3,
+ 2,
+ undef,
+ 12,
+ 12,
+ $invoiceid,
+ 42,
+ $budgetid2
+ );
+
+$order3 = GetOrder( $ordernumber3 );
+is($order3->{'quantityreceived'}, 2, 'Order not split up');
+is($order3->{'quantity'}, 2, '2 items on order');
+is($order3->{'budget_id'}, $budgetid2, 'Budget has changed');
+
$dbh->rollback;