diff --git a/Koha/MarcOrder.pm b/Koha/MarcOrder.pm index 2ec28cff59..be8f907319 100644 --- a/Koha/MarcOrder.pm +++ b/Koha/MarcOrder.pm @@ -126,15 +126,18 @@ sub create_order_lines_from_file { } ); - while( my $import_record = $import_records->next ){ - my $result = add_biblio_from_import_record({ - import_batch_id => $import_batch_id, - import_record => $import_record, - matcher_id => $params->{matcher_id}, - overlay_action => $params->{overlay_action}, - agent => $agent, - }); - warn "Duplicates found in $result->{duplicates_in_batch}, record was skipped." if $result->{duplicates_in_batch}; + while ( my $import_record = $import_records->next ) { + my $result = add_biblio_from_import_record( + { + import_batch_id => $import_batch_id, + import_record => $import_record, + matcher_id => $params->{matcher_id}, + overlay_action => $params->{overlay_action}, + agent => $agent, + } + ); + warn "Duplicates found in $result->{duplicates_in_batch}, record was skipped." + if $result->{duplicates_in_batch}; next if $result->{skip}; my $order_line_details = add_items_from_import_record( @@ -595,6 +598,50 @@ sub add_items_from_import_record { } +=head3 match_file_to_account + + my $file_match = Koha::MarcOrder->match_file_to_account({ + filename => $filename, + filepath => $filepath, + profile => $profile + }); + + Used by the cronjob to detect whether a file matches the account and should be processed + +=cut + +sub match_file_to_account { + my ( $self, $args ) = @_; + + my $match = 0; + my $filename = $args->{filename}; + my $filepath = $args->{filepath}; + my $profile = $args->{profile}; + my $format = index( $filename, '.mrc' ) != -1 ? 'ISO2709' : 'MARCXML'; + + my ( $errors, $marcrecords ); + if ( $format eq 'MARCXML' ) { + ( $errors, $marcrecords ) = C4::ImportBatch::RecordsFromMARCXMLFile( $filepath, $profile->encoding ); + } elsif ( $format eq 'ISO2709' ) { + ( $errors, $marcrecords ) = C4::ImportBatch::RecordsFromISO2709File( + $filepath, $profile->record_type, + $profile->encoding + ); + } + + my $match_record = @{$marcrecords}[0]; + my ( $field, $subfield ) = split /\$/, $profile->match_field; + + my $field_value = $match_record->subfield( $field, $subfield ) || ''; + my $match_value = $profile->match_value || ''; + + if ( $field_value eq $match_value ) { + $match = 1; + } + + return $match; +} + =head3 import_batches_list Fetches import batches matching the batch to be added to the basket and returns these to the template diff --git a/admin/marc_order_accounts.pl b/admin/marc_order_accounts.pl old mode 100644 new mode 100755 index c0e1bf25cb..acd969e997 --- a/admin/marc_order_accounts.pl +++ b/admin/marc_order_accounts.pl @@ -88,6 +88,8 @@ if ( $op eq 'acct_form' ) { item_action => scalar $input->param('item_action'), record_type => scalar $input->param('record_type'), encoding => scalar $input->param('encoding') || 'UTF-8', + match_field => scalar $input->param('match_field'), + match_value => scalar $input->param('match_value'), }; if ( scalar $input->param('id') ) { diff --git a/installer/data/mysql/atomicupdate/bug_34355-add_marc_order_accounts.pl b/installer/data/mysql/atomicupdate/bug_34355-add_marc_order_accounts.pl index f0a5f2ab21..149afbeee9 100755 --- a/installer/data/mysql/atomicupdate/bug_34355-add_marc_order_accounts.pl +++ b/installer/data/mysql/atomicupdate/bug_34355-add_marc_order_accounts.pl @@ -1,14 +1,15 @@ use Modern::Perl; return { - bug_number => "34355", + bug_number => "34355", description => "Add a table to allow creation of MARC order accounts and a syspref to activate it.", - up => sub { + up => sub { my ($args) = @_; - my ($dbh, $out) = @$args{qw(dbh out)}; + my ( $dbh, $out ) = @$args{qw(dbh out)}; - unless( TableExists('marc_order_accounts') ) { - $dbh->do(q{ + unless ( TableExists('marc_order_accounts') ) { + $dbh->do( + q{ CREATE TABLE `marc_order_accounts` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'unique identifier and primary key', `description` varchar(250) NOT NULL COMMENT 'description of this account', @@ -22,11 +23,14 @@ return { `parse_items` tinyint(1) DEFAULT NULL COMMENT 'should items be parsed', `record_type` varchar(50) DEFAULT NULL COMMENT 'type of record in the file', `encoding` varchar(50) DEFAULT NULL COMMENT 'file encoding', + `match_field` varchar(10) DEFAULT NULL COMMENT 'the field that a vendor account has been mapped to in a marc record', + `match_value` varchar(50) DEFAULT NULL COMMENT 'the value to be matched against the marc record', PRIMARY KEY (`id`), CONSTRAINT `marc_ordering_account_ibfk_1` FOREIGN KEY (`vendor_id`) REFERENCES `aqbooksellers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `marc_ordering_account_ibfk_2` FOREIGN KEY (`budget_id`) REFERENCES `aqbudgets` (`budget_id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; - }); + } + ); say $out "Added new table 'marc_order_accounts'"; } else { diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index e87ce89db9..cdb719ad0e 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -4499,6 +4499,8 @@ CREATE TABLE `marc_order_accounts` ( `parse_items` tinyint(1) DEFAULT NULL COMMENT 'should items be parsed', `record_type` varchar(50) DEFAULT NULL COMMENT 'type of record in the file', `encoding` varchar(50) DEFAULT NULL COMMENT 'file encoding', + `match_field` varchar(10) DEFAULT NULL COMMENT 'the field that a vendor account has been mapped to in a marc record', + `match_value` varchar(50) DEFAULT NULL COMMENT 'the value to be matched against the marc record', PRIMARY KEY (`id`), CONSTRAINT `marc_ordering_account_ibfk_1` FOREIGN KEY (`vendor_id`) REFERENCES `aqbooksellers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `marc_ordering_account_ibfk_2` FOREIGN KEY (`budget_id`) REFERENCES `aqbudgets` (`budget_id`) ON DELETE CASCADE ON UPDATE CASCADE diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marc_order_accounts.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marc_order_accounts.tt index 936247ea87..eda9b14447 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marc_order_accounts.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marc_order_accounts.tt @@ -127,6 +127,16 @@ MARC Order Accounts