diff --git a/Koha/MarcOrder.pm b/Koha/MarcOrder.pm index a966684d5ee..3b138753297 100644 --- a/Koha/MarcOrder.pm +++ b/Koha/MarcOrder.pm @@ -850,4 +850,50 @@ sub create_order_lines { return; } + +=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; +} + 1; \ No newline at end of file diff --git a/Koha/Schema/Result/MarcOrderAccount.pm b/Koha/Schema/Result/MarcOrderAccount.pm index 88f6119290c..be720da960e 100644 --- a/Koha/Schema/Result/MarcOrderAccount.pm +++ b/Koha/Schema/Result/MarcOrderAccount.pm @@ -116,6 +116,22 @@ type of record in the file file encoding +=head2 match_field + + data_type: 'varchar' + is_nullable: 1 + size: 10 + +the field that a vendor account has been mapped to in a marc record + +=head2 match_value + + data_type: 'varchar' + is_nullable: 1 + size: 50 + +the value to be matched against the marc record + =cut __PACKAGE__->add_columns( @@ -143,6 +159,10 @@ __PACKAGE__->add_columns( { data_type => "varchar", is_nullable => 1, size => 50 }, "encoding", { data_type => "varchar", is_nullable => 1, size => 50 }, + "match_field", + { data_type => "varchar", is_nullable => 1, size => 10 }, + "match_value", + { data_type => "varchar", is_nullable => 1, size => 50 }, ); =head1 PRIMARY KEY @@ -200,8 +220,8 @@ __PACKAGE__->belongs_to( ); -# Created by DBIx::Class::Schema::Loader v0.07049 @ 2023-07-18 16:31:16 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:vMLrmisXQnn2e60qW7ppnA +# Created by DBIx::Class::Schema::Loader v0.07049 @ 2023-09-07 08:55:26 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:6pN1TLuqkf9rQaeQ7Wf26A # You can replace this text with custom code or comments, and it will be preserved on regeneration diff --git a/admin/marc_order_accounts.pl b/admin/marc_order_accounts.pl index 7d19934ea64..8365e56ff2f 100644 --- a/admin/marc_order_accounts.pl +++ b/admin/marc_order_accounts.pl @@ -89,6 +89,8 @@ 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 f0a5f2ab216..149afbeee96 100644 --- 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 @@ `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 a59040f4bbb..35255ac3379 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -4111,6 +4111,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 1ef0c0f1174..2b7ecc49262 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 @@ -126,6 +126,16 @@ MARC Order Accounts