Lines 19-24
package Koha::MarcOrder;
Link Here
|
19 |
|
19 |
|
20 |
use Modern::Perl; |
20 |
use Modern::Perl; |
21 |
use Try::Tiny qw( catch try ); |
21 |
use Try::Tiny qw( catch try ); |
|
|
22 |
use Net::FTP; |
22 |
|
23 |
|
23 |
use base qw(Koha::Object); |
24 |
use base qw(Koha::Object); |
24 |
|
25 |
|
Lines 47-53
use C4::Biblio qw(
Link Here
|
47 |
AddBiblio |
48 |
AddBiblio |
48 |
GetMarcFromKohaField |
49 |
GetMarcFromKohaField |
49 |
TransformHtmlToXml |
50 |
TransformHtmlToXml |
50 |
GetMarcQuantity |
|
|
51 |
); |
51 |
); |
52 |
use C4::Items qw( AddItemFromMarc ); |
52 |
use C4::Items qw( AddItemFromMarc ); |
53 |
use C4::Budgets qw( GetBudgetByCode ); |
53 |
use C4::Budgets qw( GetBudgetByCode ); |
Lines 70-75
Koha::MarcOrder - Koha Marc Order Object class
Link Here
|
70 |
|
70 |
|
71 |
=cut |
71 |
=cut |
72 |
|
72 |
|
|
|
73 |
=head3 create_order_lines_from_file |
74 |
|
75 |
my $result = Koha::MarcOrder->create_order_lines_from_file($args); |
76 |
|
77 |
Controller for file staging, basket creation and order line creation when using the cronjob in marc_ordering_process.pl |
78 |
|
79 |
=cut |
80 |
|
81 |
sub create_order_lines_from_file { |
82 |
my ( $self, $args ) = @_; |
83 |
|
84 |
my $filename = $args->{filename}; |
85 |
my $filepath = $args->{filepath}; |
86 |
my $profile = $args->{profile}; |
87 |
my $agent = $args->{agent}; |
88 |
|
89 |
my $success; |
90 |
my $error; |
91 |
|
92 |
my $vendor_id = $profile->vendor_id; |
93 |
my $budget_id = $profile->budget_id; |
94 |
|
95 |
my $vendor_record = Koha::Acquisition::Booksellers->find( { id => $vendor_id } ); |
96 |
|
97 |
my $basket_id = _create_basket_for_file( |
98 |
{ |
99 |
filename => $filename, |
100 |
vendor_id => $vendor_id |
101 |
} |
102 |
); |
103 |
|
104 |
my $format = index( $filename, '.mrc' ) != -1 ? 'ISO2709' : 'MARCXML'; |
105 |
my $params = { |
106 |
record_type => $profile->record_type, |
107 |
encoding => $profile->encoding, |
108 |
format => $format, |
109 |
filepath => $filepath, |
110 |
filename => $filename, |
111 |
comments => undef, |
112 |
parse_items => $profile->parse_items, |
113 |
matcher_id => $profile->matcher_id, |
114 |
overlay_action => $profile->overlay_action, |
115 |
nomatch_action => $profile->nomatch_action, |
116 |
item_action => $profile->item_action, |
117 |
}; |
118 |
|
119 |
try { |
120 |
my $import_batch_id = _stage_file($params); |
121 |
|
122 |
my $import_records = Koha::Import::Records->search( |
123 |
{ |
124 |
import_batch_id => $import_batch_id, |
125 |
} |
126 |
); |
127 |
|
128 |
while( my $import_record = $import_records->next ){ |
129 |
my $result = add_biblio_from_import_record({ |
130 |
import_batch_id => $import_batch_id, |
131 |
import_record => $import_record, |
132 |
matcher_id => $params->{matcher_id}, |
133 |
overlay_action => $params->{overlay_action}, |
134 |
agent => $agent, |
135 |
}); |
136 |
warn "Duplicates found in $result->{duplicates_in_batch}, record was skipped." if $result->{duplicates_in_batch}; |
137 |
next if $result->{skip}; |
138 |
|
139 |
my $order_line_details = add_items_from_import_record( |
140 |
{ |
141 |
record_result => $result->{record_result}, |
142 |
basket_id => $basket_id, |
143 |
vendor => $vendor_record, |
144 |
budget_id => $budget_id, |
145 |
agent => $agent, |
146 |
} |
147 |
); |
148 |
} |
149 |
SetImportBatchStatus( $import_batch_id, 'imported' ) |
150 |
if Koha::Import::Records->search( { import_batch_id => $import_batch_id, status => 'imported' } )->count == |
151 |
Koha::Import::Records->search( { import_batch_id => $import_batch_id } )->count; |
152 |
|
153 |
$success = 1; |
154 |
} catch { |
155 |
$success = 0; |
156 |
$error = $_; |
157 |
}; |
158 |
|
159 |
return $success ? { success => 1, error => '' } : { success => 0, error => $error }; |
160 |
} |
161 |
|
73 |
=head3 import_record_and_create_order_lines |
162 |
=head3 import_record_and_create_order_lines |
74 |
|
163 |
|
75 |
my $result = Koha::MarcOrder->import_record_and_create_order_lines($args); |
164 |
my $result = Koha::MarcOrder->import_record_and_create_order_lines($args); |
Lines 82-88
sub import_record_and_create_order_lines {
Link Here
|
82 |
my ( $self, $args ) = @_; |
171 |
my ( $self, $args ) = @_; |
83 |
|
172 |
|
84 |
my $import_batch_id = $args->{import_batch_id}; |
173 |
my $import_batch_id = $args->{import_batch_id}; |
85 |
my $import_record_id_selected = $args->{import_record_id_selected} || (); |
174 |
my @import_record_id_selected = $args->{import_record_id_selected} || (); |
86 |
my $matcher_id = $args->{matcher_id}; |
175 |
my $matcher_id = $args->{matcher_id}; |
87 |
my $overlay_action = $args->{overlay_action}; |
176 |
my $overlay_action = $args->{overlay_action}; |
88 |
my $import_record = $args->{import_record}; |
177 |
my $import_record = $args->{import_record}; |
Lines 125-130
sub import_record_and_create_order_lines {
Link Here
|
125 |
}; |
214 |
}; |
126 |
} |
215 |
} |
127 |
|
216 |
|
|
|
217 |
=head3 _create_basket_for_file |
218 |
|
219 |
my $basket_id = _create_basket_for_file({ |
220 |
filename => $filename, |
221 |
vendor_id => $vendor_id |
222 |
}); |
223 |
|
224 |
Creates a basket ready to receive order lines based on the imported file |
225 |
|
226 |
=cut |
227 |
|
228 |
sub _create_basket_for_file { |
229 |
my ($args) = @_; |
230 |
|
231 |
my $filename = $args->{filename}; |
232 |
my $vendor_id = $args->{vendor_id}; |
233 |
|
234 |
# aqbasketname.basketname has a max length of 50 characters so long file names will need to be truncated |
235 |
my $basketname = length($filename) > 50 ? substr( $filename, 0, 50 ) : $filename; |
236 |
|
237 |
my $basketno = NewBasket( |
238 |
$vendor_id, 0, $basketname, q{}, |
239 |
q{} . q{} |
240 |
); |
241 |
|
242 |
return $basketno; |
243 |
} |
244 |
|
245 |
=head3 _stage_file |
246 |
|
247 |
$file->_stage_file($params) |
248 |
|
249 |
Stages a file directly using parameters from a marc ordering account and without using the background job |
250 |
This function is a mirror of Koha::BackgroundJob::StageMARCForImport->process but with the background job functionality removed |
251 |
|
252 |
=cut |
253 |
|
254 |
sub _stage_file { |
255 |
my ($args) = @_; |
256 |
|
257 |
my $record_type = $args->{record_type}; |
258 |
my $encoding = $args->{encoding}; |
259 |
my $format = $args->{format}; |
260 |
my $filepath = $args->{filepath}; |
261 |
my $filename = $args->{filename}; |
262 |
my $marc_modification_template = $args->{marc_modification_template}; |
263 |
my $comments = $args->{comments}; |
264 |
my $parse_items = $args->{parse_items}; |
265 |
my $matcher_id = $args->{matcher_id}; |
266 |
my $overlay_action = $args->{overlay_action}; |
267 |
my $nomatch_action = $args->{nomatch_action}; |
268 |
my $item_action = $args->{item_action}; |
269 |
|
270 |
my ( $batch_id, $num_valid, $num_items, @import_errors ); |
271 |
my $num_with_matches = 0; |
272 |
my $checked_matches = 0; |
273 |
my $matcher_failed = 0; |
274 |
my $matcher_code = ""; |
275 |
|
276 |
my $schema = Koha::Database->new->schema; |
277 |
try { |
278 |
$schema->storage->txn_begin; |
279 |
|
280 |
my ( $errors, $marcrecords ); |
281 |
if ( $format eq 'MARCXML' ) { |
282 |
( $errors, $marcrecords ) = C4::ImportBatch::RecordsFromMARCXMLFile( $filepath, $encoding ); |
283 |
} elsif ( $format eq 'ISO2709' ) { |
284 |
( $errors, $marcrecords ) = C4::ImportBatch::RecordsFromISO2709File( |
285 |
$filepath, $record_type, |
286 |
$encoding |
287 |
); |
288 |
} else { # plugin based |
289 |
$errors = []; |
290 |
$marcrecords = C4::ImportBatch::RecordsFromMarcPlugin( |
291 |
$filepath, $format, |
292 |
$encoding |
293 |
); |
294 |
} |
295 |
|
296 |
( $batch_id, $num_valid, $num_items, @import_errors ) = BatchStageMarcRecords( |
297 |
$record_type, $encoding, |
298 |
$marcrecords, $filename, |
299 |
$marc_modification_template, $comments, |
300 |
'', $parse_items, |
301 |
0 |
302 |
); |
303 |
|
304 |
if ($matcher_id) { |
305 |
my $matcher = C4::Matcher->fetch($matcher_id); |
306 |
if ( defined $matcher ) { |
307 |
$checked_matches = 1; |
308 |
$matcher_code = $matcher->code(); |
309 |
$num_with_matches = BatchFindDuplicates( $batch_id, $matcher, 10 ); |
310 |
SetImportBatchMatcher( $batch_id, $matcher_id ); |
311 |
SetImportBatchOverlayAction( $batch_id, $overlay_action ); |
312 |
SetImportBatchNoMatchAction( $batch_id, $nomatch_action ); |
313 |
SetImportBatchItemAction( $batch_id, $item_action ); |
314 |
$schema->storage->txn_commit; |
315 |
} else { |
316 |
$matcher_failed = 1; |
317 |
$schema->storage->txn_rollback; |
318 |
} |
319 |
} else { |
320 |
$schema->storage->txn_commit; |
321 |
} |
322 |
|
323 |
return $batch_id; |
324 |
} catch { |
325 |
warn $_; |
326 |
$schema->storage->txn_rollback; |
327 |
die "Something terrible has happened!" |
328 |
if ( $_ =~ /Rollback failed/ ); # TODO Check test: Rollback failed |
329 |
}; |
330 |
} |
331 |
|
128 |
=head3 _get_syspref_mappings |
332 |
=head3 _get_syspref_mappings |
129 |
|
333 |
|
130 |
my $syspref_info = _get_syspref_mappings( $marcrecord, $syspref_name ); |
334 |
my $syspref_info = _get_syspref_mappings( $marcrecord, $syspref_name ); |
Lines 234-240
sub add_biblio_from_import_record {
Link Here
|
234 |
my ($args) = @_; |
438 |
my ($args) = @_; |
235 |
|
439 |
|
236 |
my $import_batch_id = $args->{import_batch_id}; |
440 |
my $import_batch_id = $args->{import_batch_id}; |
237 |
my $import_record_id_selected = $args->{import_record_id_selected} || (); |
441 |
my @import_record_id_selected = $args->{import_record_id_selected} || (); |
238 |
my $matcher_id = $args->{matcher_id}; |
442 |
my $matcher_id = $args->{matcher_id}; |
239 |
my $overlay_action = $args->{overlay_action}; |
443 |
my $overlay_action = $args->{overlay_action}; |
240 |
my $import_record = $args->{import_record}; |
444 |
my $import_record = $args->{import_record}; |
Lines 247-253
sub add_biblio_from_import_record {
Link Here
|
247 |
record_result => 0, |
451 |
record_result => 0, |
248 |
duplicates_in_batch => 0, |
452 |
duplicates_in_batch => 0, |
249 |
skip => 1 |
453 |
skip => 1 |
250 |
} if not grep { $_ eq $import_record->import_record_id } @{$import_record_id_selected}; |
454 |
} if not grep { $_ eq $import_record->import_record_id } @import_record_id_selected; |
251 |
} |
455 |
} |
252 |
|
456 |
|
253 |
my $marcrecord = $import_record->get_marc_record || die "Couldn't translate marc information"; |
457 |
my $marcrecord = $import_record->get_marc_record || die "Couldn't translate marc information"; |
Lines 333-361
sub add_items_from_import_record {
Link Here
|
333 |
my $marc_fields_to_order = _get_syspref_mappings( $marcrecord, 'MarcFieldsToOrder' ); |
537 |
my $marc_fields_to_order = _get_syspref_mappings( $marcrecord, 'MarcFieldsToOrder' ); |
334 |
my $marc_item_fields_to_order = _get_syspref_mappings( $marcrecord, 'MarcItemFieldsToOrder' ); |
538 |
my $marc_item_fields_to_order = _get_syspref_mappings( $marcrecord, 'MarcItemFieldsToOrder' ); |
335 |
|
539 |
|
336 |
my $item_fields = { |
540 |
my $item_fields = _create_item_fields_from_syspref( |
337 |
homebranch => $marc_item_fields_to_order->{homebranch}, |
541 |
{ |
338 |
holdingbranch => $marc_item_fields_to_order->{holdingbranch}, |
542 |
marc_fields_to_order => $marc_fields_to_order, |
339 |
itype => $marc_item_fields_to_order->{itype}, |
543 |
marc_item_fields_to_order => $marc_item_fields_to_order, |
340 |
nonpublic_note => $marc_item_fields_to_order->{nonpublic_note}, |
544 |
budget_id => $budget_id |
341 |
public_note => $marc_item_fields_to_order->{public_note}, |
545 |
} |
342 |
loc => $marc_item_fields_to_order->{loc}, |
546 |
); |
343 |
ccode => $marc_item_fields_to_order->{ccode}, |
|
|
344 |
notforloan => $marc_item_fields_to_order->{notforloan}, |
345 |
uri => $marc_item_fields_to_order->{uri}, |
346 |
copyno => $marc_item_fields_to_order->{copyno}, |
347 |
quantity => $marc_item_fields_to_order->{quantity}, |
348 |
price => $marc_item_fields_to_order->{price}, |
349 |
replacementprice => $marc_item_fields_to_order->{replacementprice}, |
350 |
itemcallnumber => $marc_item_fields_to_order->{itemcallnumber}, |
351 |
budget_code => $marc_item_fields_to_order->{budget_code}, |
352 |
c_quantity => $marc_fields_to_order->{quantity}, |
353 |
c_budget_code => $marc_fields_to_order->{budget_code}, |
354 |
c_price => $marc_fields_to_order->{price}, |
355 |
c_discount => $marc_fields_to_order->{discount}, |
356 |
c_sort1 => $marc_fields_to_order->{sort1}, |
357 |
c_sort2 => $marc_fields_to_order->{sort2}, |
358 |
}; |
359 |
|
547 |
|
360 |
my $order_line_fields = parse_input_into_order_line_fields( |
548 |
my $order_line_fields = parse_input_into_order_line_fields( |
361 |
{ |
549 |
{ |
Lines 405-410
sub add_items_from_import_record {
Link Here
|
405 |
} |
593 |
} |
406 |
} |
594 |
} |
407 |
|
595 |
|
|
|
596 |
|
408 |
=head3 import_batches_list |
597 |
=head3 import_batches_list |
409 |
|
598 |
|
410 |
Fetches import batches matching the batch to be added to the basket and returns these to the template |
599 |
Fetches import batches matching the batch to be added to the basket and returns these to the template |
Lines 668-674
my $order_line_fields = parse_input_into_order_line_fields(
Link Here
|
668 |
} |
857 |
} |
669 |
); |
858 |
); |
670 |
|
859 |
|
671 |
|
|
|
672 |
=cut |
860 |
=cut |
673 |
|
861 |
|
674 |
sub parse_input_into_order_line_fields { |
862 |
sub parse_input_into_order_line_fields { |
Lines 682-729
sub parse_input_into_order_line_fields {
Link Here
|
682 |
my $fields = $args->{fields}; |
870 |
my $fields = $args->{fields}; |
683 |
my $marcrecord = $args->{marcrecord}; |
871 |
my $marcrecord = $args->{marcrecord}; |
684 |
|
872 |
|
685 |
my $quantity = $fields->{quantity} || 1; |
873 |
my $quantity = $fields->{quantity} || 1; |
686 |
my @homebranches = $client ? @{ $fields->{homebranches} } : ( ( $fields->{homebranch} ) x $quantity ); |
874 |
my @homebranches = $fields->{homebranches} ? @{ $fields->{homebranches} } : (); |
687 |
my @holdingbranches = $client ? @{ $fields->{holdingbranches} } : ( ( $fields->{holdingbranch} ) x $quantity ); |
875 |
my @holdingbranches = $fields->{holdingbranches} ? @{ $fields->{holdingbranches} } : (); |
688 |
my @itypes = $client ? @{ $fields->{itypes} } : ( ( $fields->{itype} ) x $quantity ); |
876 |
my @itypes = $fields->{itypes} ? @{ $fields->{itypes} } : (); |
689 |
my @nonpublic_notes = $client ? @{ $fields->{nonpublic_notes} } : ( ( $fields->{nonpublic_note} ) x $quantity ); |
877 |
my @nonpublic_notes = $fields->{nonpublic_notes} ? @{ $fields->{nonpublic_notes} } : (); |
690 |
my @public_notes = $client ? @{ $fields->{public_notes} } : ( ( $fields->{public_note} ) x $quantity ); |
878 |
my @public_notes = $fields->{public_notes} ? @{ $fields->{public_notes} } : (); |
691 |
my @locs = $client ? @{ $fields->{locs} } : ( ( $fields->{loc} ) x $quantity ); |
879 |
my @locs = $fields->{locs} ? @{ $fields->{locs} } : (); |
692 |
my @ccodes = $client ? @{ $fields->{ccodes} } : ( ( $fields->{ccode} ) x $quantity ); |
880 |
my @ccodes = $fields->{ccodes} ? @{ $fields->{ccodes} } : (); |
693 |
my @notforloans = $client ? @{ $fields->{notforloans} } : ( ( $fields->{notforloan} ) x $quantity ); |
881 |
my @notforloans = $fields->{notforloans} ? @{ $fields->{notforloans} } : (); |
694 |
my @uris = $client ? @{ $fields->{uris} } : ( ( $fields->{uri} ) x $quantity ); |
882 |
my @uris = $fields->{uris} ? @{ $fields->{uris} } : (); |
695 |
my @copynos = $client ? @{ $fields->{copynos} } : ( ( $fields->{copyno} ) x $quantity ); |
883 |
my @copynos = $fields->{copynos} ? @{ $fields->{copynos} } : (); |
696 |
my @itemprices = $client ? @{ $fields->{itemprices} } : ( ( $fields->{price} ) x $quantity ); |
884 |
my @itemprices = $fields->{itemprices} ? @{ $fields->{itemprices} } : (); |
697 |
my @replacementprices = |
885 |
my @replacementprices = $fields->{replacementprices} ? @{ $fields->{replacementprices} } : (); |
698 |
$client ? @{ $fields->{replacementprices} } : ( ( $fields->{replacementprice} ) x $quantity ); |
886 |
my @itemcallnumbers = $fields->{itemcallnumbers} ? @{ $fields->{itemcallnumbers} } : (); |
699 |
my @itemcallnumbers = $client ? @{ $fields->{itemcallnumbers} } : ( ( $fields->{itemcallnumber} ) x $quantity ); |
|
|
700 |
my @coded_location_qualifiers = |
887 |
my @coded_location_qualifiers = |
701 |
$client ? @{ $fields->{coded_location_qualifiers} } : ( ( $fields->{coded_location_qualifier} ) x $quantity ); |
888 |
$fields->{coded_location_qualifiers} ? @{ $fields->{coded_location_qualifiers} } : (); |
702 |
my @barcodes = $client ? @{ $fields->{barcodes} } : ( ( $fields->{barcode} ) x $quantity ); |
889 |
my @barcodes = $fields->{barcodes} ? @{ $fields->{barcodes} } : (); |
703 |
my @enumchrons = $client ? @{ $fields->{enumchrons} } : ( ( $fields->{enumchron} ) x $quantity ); |
890 |
my @enumchrons = $fields->{enumchrons} ? @{ $fields->{enumchrons} } : (); |
704 |
my $c_quantity = $client ? $fields->{c_quantity} : $fields->{c_quantity}; |
891 |
my @budget_codes = $fields->{budget_codes} ? @{ $fields->{budget_codes} } : (); |
705 |
my $c_budget_id = $client ? $fields->{c_budget_id} : $fields->{c_budget_id}; |
892 |
my $c_quantity = $fields->{c_quantity}; |
706 |
my $c_discount = $client ? $fields->{c_discount} : $fields->{c_discount}; |
893 |
my $c_budget_id = $fields->{c_budget_id}; |
707 |
my $c_sort1 = $client ? $fields->{c_sort1} : $fields->{c_sort1}; |
894 |
my $c_discount = $fields->{c_discount}; |
708 |
my $c_sort2 = $client ? $fields->{c_sort2} : $fields->{c_sort2}; |
895 |
my $c_sort1 = $fields->{c_sort1}; |
709 |
my $c_replacement_price = $client ? $fields->{c_replacement_price} : $fields->{c_replacement_price}; |
896 |
my $c_sort2 = $fields->{c_sort2}; |
710 |
my $c_price = $client ? $fields->{c_price} : $fields->{c_price}; |
897 |
my $c_replacement_price = $fields->{c_replacement_price}; |
|
|
898 |
my $c_price = $fields->{c_price}; |
711 |
|
899 |
|
712 |
# If using the cronjob, we want to default to the account budget if not mapped on the record |
900 |
# If using the cronjob, we want to default to the account budget if not mapped on the record |
713 |
my $item_budget_id; |
901 |
if ( !$client && ( !@budget_codes || scalar(@budget_codes) == 0 ) ) { |
714 |
if ( !$client && ( $fields->{budget_code} || $fields->{c_budget_code} ) ) { |
902 |
for ( 1 .. $quantity ) { |
715 |
my $budget_code = $fields->{budget_code} || $fields->{c_budget_code}; |
903 |
my $item_budget = GetBudgetByCode($c_budget_id); |
716 |
my $item_budget = GetBudgetByCode($budget_code); |
904 |
if ($item_budget) { |
717 |
if ($item_budget) { |
905 |
push( @budget_codes, $item_budget ); |
718 |
$item_budget_id = $item_budget->{budget_id}; |
906 |
} else { |
719 |
} else { |
907 |
push( @budget_codes, $budget_id ); |
720 |
$item_budget_id = $budget_id; |
908 |
} |
721 |
} |
909 |
} |
722 |
} else { |
|
|
723 |
$item_budget_id = $budget_id; |
724 |
} |
910 |
} |
725 |
my @budget_codes = $client ? @{ $fields->{budget_codes} } : ($item_budget_id); |
911 |
my $loop_limit = $quantity; |
726 |
my $loop_limit = $client ? scalar(@homebranches) : $quantity; |
|
|
727 |
|
912 |
|
728 |
my $order_line_fields = { |
913 |
my $order_line_fields = { |
729 |
biblionumber => $biblionumber, |
914 |
biblionumber => $biblionumber, |
Lines 959-962
sub _format_price_to_CurrencyFormat_syspref {
Link Here
|
959 |
return $price; |
1144 |
return $price; |
960 |
} |
1145 |
} |
961 |
|
1146 |
|
|
|
1147 |
=head3 _create_item_fields_from_syspref |
1148 |
|
1149 |
Takes the two sysprefs and returns the item fields required to process and create orderlines |
1150 |
|
1151 |
my $item_fields = _create_item_fields_from_syspref( |
1152 |
{ |
1153 |
marc_fields_to_order => $marc_fields_to_order, |
1154 |
marc_item_fields_to_order => $marc_item_fields_to_order |
1155 |
} |
1156 |
); |
1157 |
|
1158 |
=cut |
1159 |
|
1160 |
sub _create_item_fields_from_syspref { |
1161 |
my ($args) = @_; |
1162 |
|
1163 |
my $marc_item_fields_to_order = $args->{marc_item_fields_to_order}; |
1164 |
my $marc_fields_to_order = $args->{marc_fields_to_order}; |
1165 |
my $budget_id = $args->{budget_id}; |
1166 |
|
1167 |
my @homebranches = (); |
1168 |
my @holdingbranches = (); |
1169 |
my @itypes = (); |
1170 |
my @nonpublic_notes = (); |
1171 |
my @public_notes = (); |
1172 |
my @locs = (); |
1173 |
my @ccodes = (); |
1174 |
my @notforloans = (); |
1175 |
my @uris = (); |
1176 |
my @copynos = (); |
1177 |
my @budget_codes = (); |
1178 |
my @itemprices = (); |
1179 |
my @replacementprices = (); |
1180 |
my @itemcallnumbers = (); |
1181 |
|
1182 |
foreach my $infoset (@$marc_item_fields_to_order) { |
1183 |
my $quantity = $infoset->{quantity} || 1; |
1184 |
for ( my $i = 0 ; $i < $quantity ; $i++ ) { |
1185 |
my $budget_code; |
1186 |
if ( !$infoset->{budget_code} ) { |
1187 |
if ( $marc_fields_to_order->{budget_code} ) { |
1188 |
$budget_code = $marc_fields_to_order->{budget_code}; |
1189 |
} |
1190 |
} else { |
1191 |
$budget_code = $infoset->{budget_code}; |
1192 |
} |
1193 |
|
1194 |
my $item_budget_id; |
1195 |
my $item_budget = GetBudgetByCode($budget_code); |
1196 |
if ($item_budget) { |
1197 |
$item_budget_id = $item_budget->{budget_id}; |
1198 |
} else { |
1199 |
$item_budget_id = $budget_id; |
1200 |
} |
1201 |
|
1202 |
push @homebranches, $infoset->{homebranch}; |
1203 |
push @holdingbranches, $infoset->{holdingbranch}; |
1204 |
push @itypes, $infoset->{itype}; |
1205 |
push @nonpublic_notes, $infoset->{nonpublic_note}; |
1206 |
push @public_notes, $infoset->{public_note}; |
1207 |
push @locs, $infoset->{loc}; |
1208 |
push @ccodes, $infoset->{ccode}; |
1209 |
push @notforloans, $infoset->{notforloan}; |
1210 |
push @uris, $infoset->{uri}; |
1211 |
push @copynos, $infoset->{copyno}; |
1212 |
push @budget_codes, $item_budget_id; |
1213 |
push @itemprices, $infoset->{price}; |
1214 |
push @replacementprices, $infoset->{replacementprice}; |
1215 |
push @itemcallnumbers, $infoset->{itemcallnumber}; |
1216 |
} |
1217 |
} |
1218 |
|
1219 |
my $item_fields = { |
1220 |
quantity => scalar(@homebranches), |
1221 |
homebranches => \@homebranches, |
1222 |
holdingbranches => \@holdingbranches, |
1223 |
itypes => \@itypes, |
1224 |
nonpublic_notes => \@nonpublic_notes, |
1225 |
public_notes => \@public_notes, |
1226 |
locs => \@locs, |
1227 |
ccodes => \@ccodes, |
1228 |
notforloans => \@notforloans, |
1229 |
uris => \@uris, |
1230 |
copynos => \@copynos, |
1231 |
budget_codes => \@budget_codes, |
1232 |
itemprices => \@itemprices, |
1233 |
replacementprices => \@replacementprices, |
1234 |
itemcallnumbers => \@itemcallnumbers, |
1235 |
c_quantity => $marc_fields_to_order->{quantity}, |
1236 |
c_budget_code => $marc_fields_to_order->{budget_code}, |
1237 |
c_price => $marc_fields_to_order->{price}, |
1238 |
c_discount => $marc_fields_to_order->{discount}, |
1239 |
c_sort1 => $marc_fields_to_order->{sort1}, |
1240 |
c_sort2 => $marc_fields_to_order->{sort2}, |
1241 |
}; |
1242 |
|
1243 |
return $item_fields; |
1244 |
} |
1245 |
|
962 |
1; |
1246 |
1; |