use Koha::Number::Price;
use Koha::Libraries;
+use Koha::Acquisition::Baskets;
use Koha::Acquisition::Currencies;
use Koha::Acquisition::Orders;
use Koha::Acquisition::Booksellers;
if (! $cgiparams->{'basketno'}){
die "Basketnumber required to order from iso2709 file import";
}
+my $basket = Koha::Acquisition::Baskets->find( $cgiparams->{basketno} );
#
# 1st step = choose the file to import into acquisition
"allmatch" => $allmatch,
);
import_biblios_list($template, $cgiparams->{'import_batch_id'});
- my $basket = GetBasket($cgiparams->{basketno});
- if ( C4::Context->preference('AcqCreateItem') eq 'ordering' && !$basket->{is_standing} ) {
+ if ( $basket->effective_create_items eq 'ordering' && !$basket->is_standing ) {
# prepare empty item form
my $cell = PrepareItemrecordDisplay( '', '', '', 'ACQ' );
for (my $i = 0; $i < $count; $i++) {
$budget_hash->{$budget_codes[$i]}->{quantity} += 1;
$budget_hash->{$budget_codes[$i]}->{price} = $itemprices[$i];
+ $budget_hash->{$budget_codes[$i]}->{itemnumbers} //= [];
+ push @{ $budget_hash->{$budget_codes[$i]}->{itemnumbers} }, $itemnumbers[$i];
}
# Create orderlines from MarcItemFieldsToOrder
$orderinfo{tax_rate} = $bookseller->tax_rate;
my $c = $c_discount ? $c_discount : $bookseller->discount / 100;
$orderinfo{discount} = $c;
- if ( $bookseller->listincgst ) {
- if ( $c_discount ) {
- $orderinfo{ecost} = $price;
- $orderinfo{rrp} = $orderinfo{ecost} / ( 1 - $c );
- } else {
- $orderinfo{ecost} = $price * ( 1 - $c );
- $orderinfo{rrp} = $price;
- }
+ if ( $c_discount ) {
+ $orderinfo{ecost} = $price;
+ $orderinfo{rrp} = $orderinfo{ecost} / ( 1 - $c );
} else {
- if ( $c_discount ) {
- $orderinfo{ecost} = $price / ( 1 + $orderinfo{tax_rate} );
- $orderinfo{rrp} = $orderinfo{ecost} / ( 1 - $c );
- } else {
- $orderinfo{rrp} = $price / ( 1 + $orderinfo{tax_rate} );
- $orderinfo{ecost} = $orderinfo{rrp} * ( 1 - $c );
- }
+ $orderinfo{ecost} = $price * ( 1 - $c );
+ $orderinfo{rrp} = $price;
}
$orderinfo{listprice} = $orderinfo{rrp} / $active_currency->rate;
$orderinfo{unitprice} = $orderinfo{ecost};
};
my $order = Koha::Acquisition::Order->new( \%orderinfo )->store;
- $order->add_item( $_ ) for @itemnumbers;
+ $order->add_item( $_ ) for @{ $budget_hash->{$budget_id}->{itemnumbers} };
}
}
} else {
$orderinfo{tax_rate} = $bookseller->tax_rate;
my $c = $c_discount ? $c_discount : $bookseller->discount / 100;
$orderinfo{discount} = $c;
- if ( $bookseller->listincgst ) {
- if ( $c_discount ) {
- $orderinfo{ecost} = $price;
- $orderinfo{rrp} = $orderinfo{ecost} / ( 1 - $c );
- } else {
- $orderinfo{ecost} = $price * ( 1 - $c );
- $orderinfo{rrp} = $price;
- }
+ if ( $c_discount ) {
+ $orderinfo{ecost} = $price;
+ $orderinfo{rrp} = $orderinfo{ecost} / ( 1 - $c );
} else {
- if ( $c_discount ) {
- $orderinfo{ecost} = $price / ( 1 + $orderinfo{tax_rate} );
- $orderinfo{rrp} = $orderinfo{ecost} / ( 1 - $c );
- } else {
- $orderinfo{rrp} = $price / ( 1 + $orderinfo{tax_rate} );
- $orderinfo{ecost} = $orderinfo{rrp} * ( 1 - $c );
- }
+ $orderinfo{ecost} = $price * ( 1 - $c );
+ $orderinfo{rrp} = $price;
}
$orderinfo{listprice} = $orderinfo{rrp} / $active_currency->rate;
$orderinfo{unitprice} = $orderinfo{ecost};
# 4th, add items if applicable
# parse the item sent by the form, and create an item just for the import_record_id we are dealing with
# this is not optimised, but it's working !
- my $basket = GetBasket($cgiparams->{basketno});
- if ( C4::Context->preference('AcqCreateItem') eq 'ordering' && !$basket->{is_standing} ) {
+ if ( $basket->effective_create_items eq 'ordering' && !$basket->is_standing ) {
my @tags = $input->multi_param('tag');
my @subfields = $input->multi_param('subfield');
my @field_values = $input->multi_param('field_value');
sub equal_number_of_fields {
my ($tags_list, $record) = @_;
- my $refcount = 0;
- my $count = 0;
+ my $tag_fields_count;
for my $tag (@$tags_list) {
- return -1 if $count != $refcount;
- $count = 0;
- for my $field ($record->field($tag)) {
- $count++;
+ my @fields = $record->field($tag);
+ $tag_fields_count->{$tag} = scalar @fields;
+ }
+
+ my $tags_count;
+ foreach my $key ( keys %$tag_fields_count ) {
+ if ( $tag_fields_count->{$key} > 0 ) { # Having 0 of a field is ok
+ $tags_count //= $tag_fields_count->{$key}; # Start with the count from the first occurrence
+ return -1 if $tag_fields_count->{$key} != $tags_count; # All counts of various fields should be equal if they exist
}
- $refcount = $count if ($refcount == 0);
}
- return -1 if $count != $refcount;
- return $count;
+
+ return $tags_count;
}
sub get_infos_syspref_on_item {
@tags_list = List::MoreUtils::uniq(@tags_list);
my $tags_count = equal_number_of_fields(\@tags_list, $record);
- # Return if the number of theses fields in the record is not the same.
+ # Return if the number of these fields in the record is not the same.
return -1 if $tags_count == -1;
# Gather the fields
for my $field ( @fields ) {
my ( $f, $sf ) = split /\$/, $field;
next unless $f and $sf;
- my $v = $fields_hash->{$f}[$i]->subfield( $sf );
+ my $v = $fields_hash->{$f}[$i] ? $fields_hash->{$f}[$i]->subfield( $sf ) : undef;
$r->{$field_name} = $v if (defined $v);
last if $yaml->{$field};
}