From 9ea491b34f1edae50330ff55a0b9864fc99890bd Mon Sep 17 00:00:00 2001 From: miker Date: Thu, 20 Apr 2006 03:54:49 +0000 Subject: [PATCH] initial holdings importer git-svn-id: svn://svn.open-ils.org/ILS/trunk@3763 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../Application/Storage/Publisher/asset.pm | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/asset.pm b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/asset.pm index 2d3336c603..d73c2d37da 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/asset.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/asset.pm @@ -6,6 +6,101 @@ use base qw/OpenILS::Application::Storage/; # #my $log = 'OpenSRF::Utils::Logger'; +use MARC::Record; +use MARC::File::XML; + +#our $_default_subfield_map = { +# call_number => $cn, +# barcode => $bc, +# owning_lib => $ol, +# circulating_lib => $cl, +# copy_location => $sl, +# copy_number => $num, +# price => $pr, +# status => $loc, +# create_date => $date, +# +# legacy_item_type => $it, +# legacy_item_cat_1 => $ic1, +# legacy_item_cat_2 => $ic2, +#}; + +sub import_xml_holdings { + my $self = shift; + my $client = shift; + my $editor = shift; + my $record = shift; + my $xml = shift; + my $tag = shift; + my $map = shift; + my $date_format = shift || 'mm/dd/yyyy'; + + my $r = MARC::Record->new_from_xml($xml); + + for my $f ( $r->fields( $tag ) ) { + next unless ($f->subfield( $map->{owning_lib} )); + + my $ol = actor::org_unit->search( shortname => $f->subfield( $map->{owning_lib} ) )->next->id; + my $cl = actor::org_unit->search( shortname => $f->subfield( $map->{circulating_lib} ) )->next->id; + + my $cn = asset::call_number->find_or_create( + { label => $f->subfield( $map->{call_number} ), + owning_lib => $ol, + record => $record, + creator => $editor, + editor => $editor, + } + ); + + my $create_date = $f->subfield( $map->{create_date} ); + + my ($m,$d,$y); + if ($date_format eq 'mm/dd/yyyy') { + ($m,$d,$y) = split '/', $create_date; + + } elsif ($date_format eq 'dd/mm/yyyy') { + ($d,$m,$y) = split '/', $create_date; + + } elsif ($date_format eq 'mm-dd-yyyy') { + ($m,$d,$y) = split '-', $create_date; + + } elsif ($date_format eq 'dd-mm-yyyy') { + ($d,$m,$y) = split '-', $create_date; + + } elsif ($date_format eq 'yyyy-mm-dd') { + ($y,$m,$d) = split '-', $create_date; + + } elsif ($date_format eq 'yyyy/mm/dd') { + ($y,$m,$d) = split '-', $create_date; + } + + my $price = $f->subfield( $map->{price} ); + $price =~ s/[^0-9\.]+//gso; + $price ||= '0.00'; + + $cn->add_to_copies( + { circ_lib => actor::org_unit->search( shortname => $f->subfield( $map->{circulating_lib} ) )->next->id, + copy_number => $f->subfield( $map->{copy_number} ), + price => $price, + barcode => $f->subfield( $map->{barcode} ), + loan_duration => 2, + fine_level => 2, + creator => $editor, + editor => $editor, + create_date => sprintf('%04d-%02d-%02d',$y,$m,$d), + } + ); + } + + return 1; +} +__PACKAGE__->register_method( + method => 'import_xml_holdings', + api_name => 'open-ils.storage.asset.holdings.import.xml', + argc => 5, + stream => 0, +); + # XXX # see /home/miker/cn_browse-test.sql for page up and down sql ... # XXX -- 2.43.2