Bug 34355: Add match_field and match_value to allow multiple accounts in the same file directory
Signed-off-by: Andrew Fuerste Henry <andrewfh@dubcolib.org> Signed-off-by: Nick Clemens <nick@bywatersolutions.com> Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
parent
e616b9b56c
commit
6b85d06c19
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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') ) {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -127,6 +127,16 @@ MARC Order Accounts
|
|||
<input type="text" name="download_directory" id="download_directory" size="20" value="[% account.download_directory | html %]" />
|
||||
<div class="hint">The download directory specifies the directory in your koha installation that should be searched for new files.</div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="match_field">Match field: </label>
|
||||
<input type="text" name="match_field" id="match_field" size="20" value="[% account.match_field | html %]" />
|
||||
<div class="hint">(Optional): If you have files from multiple vendors in the same file directory, the match field is the field in the marc record that will be checked to see if the file should be processed by this account.</div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="match_value">Match value: </label>
|
||||
<input type="text" name="match_value" id="match_value" size="20" value="[% account.match_value | html %]" />
|
||||
<div class="hint">(Optional): This is the value that will be checked against the match field to see if the file matches this account. If it does it will be processed by this account, if not it will be skipped.</div>
|
||||
</li>
|
||||
</ol>
|
||||
</fieldset>
|
||||
<fieldset class="rows">
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ foreach my $acct (@accounts) {
|
|||
}
|
||||
}
|
||||
}
|
||||
say sprintf "%s files processed", $files_processed unless $files_processed == 0;
|
||||
say sprintf "%s file(s) processed", $files_processed unless $files_processed == 0;
|
||||
print "Moving to next account\n\n";
|
||||
}
|
||||
print "Process complete\n";
|
||||
|
|
|
|||
Loading…
Reference in New Issue