From 78b086f03289bbe6404dd23908583efd1b4bf4fe Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Thu, 26 Sep 2019 10:39:36 -0400 Subject: [PATCH] Bug 23682 - Add ability to manually import EDI invoices as an alternative to automatic importing on download Some library would like to delay the importing of invoices until a time of their choosing. The invoices should be imported into the database as they do now, but the invoice processing should be skipped. Instead, any invoice file with a status of 'new' should have an 'Import' button to process the invoice. Test Plan: 1) Apply this patch 2) Run updatedatabase.pl 3) Enable the new syspref EdifactInvoiceImport 4) Run the edi cronjob to import a new invoice file 5) View EDI messages table at /acqui/edifactmsgs.pl 6) Note the invoice files is not processes, and retains the status of 'new' 7) Use the 'import' button to process the invoice 8) Note the invoice is now marked 'received' and the 'import' button is gone 9) Verify the invoice was actually processes --- acqui/edifactmsgs.pl | 24 ++++++++ .../data/mysql/atomicupdate/bug_23682.perl | 10 ++++ installer/data/mysql/sysprefs.sql | 1 + .../prog/en/modules/acqui/edifactmsgs.tt | 3 + .../admin/preferences/acquisitions.pref | 8 +++ misc/cronjobs/edi_cron.pl | 55 ++++++++++--------- 6 files changed, 74 insertions(+), 27 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_23682.perl diff --git a/acqui/edifactmsgs.pl b/acqui/edifactmsgs.pl index 12e22570f7..57e1d14dda 100755 --- a/acqui/edifactmsgs.pl +++ b/acqui/edifactmsgs.pl @@ -45,6 +45,30 @@ if ( $cmd && $cmd eq 'delete' ) { $msg->update; } +if ( $cmd && $cmd eq 'import' ) { + my $id = $q->param('message_id'); + my $invoice = $schema->resultset('EdifactMessage')->find($id); + + my $plugin_used = 0; + if ( my $plugin_class = $invoice->edi_acct->plugin ) { + my $plugin = $plugin_class->new(); + if ( $plugin->can('edifact_process_invoice') ) { + $plugin_used = 1; + Koha::Plugins::Handler->run( + { + class => $plugin_class, + method => 'edifact_process_invoice', + params => { + invoice => $invoice, + } + } + ); + } + } + + process_invoice($invoice) unless $plugin_used; +} + my @msgs = $schema->resultset('EdifactMessage')->search( { deleted => 0, diff --git a/installer/data/mysql/atomicupdate/bug_23682.perl b/installer/data/mysql/atomicupdate/bug_23682.perl new file mode 100644 index 0000000000..8aa64325fc --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_23682.perl @@ -0,0 +1,10 @@ +$DBversion = 'XXX'; # will be replaced by the RM +if ( CheckVersion( $DBversion ) ) { + $dbh->do(q{ + INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES + ('EdifactInvoiceImport', 'automatic', 'automatic|manual', "If on, don't auto-import EDI invoices, just keep them in the database with the status 'new'", 'Choice') + }); + + SetVersion( $DBversion ); + print "Upgrade to $DBversion done (Bug XXXXX - description)\n"; +} diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index 5b916426bf..a8495ff7cd 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -160,6 +160,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('DumpTemplateVarsIntranet', '0', NULL , 'If enabled, dump all Template Toolkit variable to a comment in the html source for the staff intranet.', 'YesNo'), ('DumpTemplateVarsOpac', '0', NULL , 'If enabled, dump all Template Toolkit variable to a comment in the html source for the opac.', 'YesNo'), ('EasyAnalyticalRecords','0','','If on, display in the catalogue screens tools to easily setup analytical record relationships','YesNo'), +('EdifactInvoiceImport', 'automatic', 'automatic|manual', "If on, don't auto-import EDI invoices, just keep them in the database with the status 'new'", 'Choice'), ('ElasticsearchIndexStatus_authorities', '0', 'Authorities index status', NULL, NULL), ('ElasticsearchIndexStatus_biblios', '0', 'Biblios index status', NULL, NULL), ('ElasticsearchMARCFormat', 'ISO2709', 'ISO2709|ARRAY', 'Elasticsearch MARC format. ISO2709 format is recommended as it is faster and takes less space, whereas array is searchable.', 'Choice'), diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/edifactmsgs.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/edifactmsgs.tt index 5f0dc43ac6..9c69e8afcb 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/edifactmsgs.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/edifactmsgs.tt @@ -71,6 +71,9 @@ View message Delete + [% IF msg.status == 'new' %] + Import + [% END %] [% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/acquisitions.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/acquisitions.pref index c6d8d8d55c..14447982d2 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/acquisitions.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/acquisitions.pref @@ -121,3 +121,11 @@ Acquisitions: "pdfformat::layout3pagesfr": French 3-page "pdfformat::layout2pagesde": German 2-page - layout when printing basket groups. + EDIFACT: + - + - pref: EdifactInvoiceImport + default: no + choices: + automatic: "Do" + manual: "Don't" + - " automatically import EDIFACT invoice message file when they are downloaded." diff --git a/misc/cronjobs/edi_cron.pl b/misc/cronjobs/edi_cron.pl index b345dc4616..7955ad2710 100755 --- a/misc/cronjobs/edi_cron.pl +++ b/misc/cronjobs/edi_cron.pl @@ -121,36 +121,37 @@ foreach my $quote_file (@downloaded_quotes) { } # process any downloaded invoices - -my @downloaded_invoices = $schema->resultset('EdifactMessage')->search( - { - message_type => 'INVOICE', - status => 'new', - } -)->all; - -foreach my $invoice (@downloaded_invoices) { - my $filename = $invoice->filename(); - $logger->trace("Processing invoice $filename"); - - my $plugin_used = 0; - if ( my $plugin_class = $invoice->edi_acct->plugin ) { - my $plugin = $plugin_class->new(); - if ( $plugin->can('edifact_process_invoice') ) { - $plugin_used = 1; - Koha::Plugins::Handler->run( - { - class => $plugin_class, - method => 'edifact_process_invoice', - params => { - invoice => $invoice, +if ( C4::Context->preference('EdifactInvoiceImport') eq 'automatic' ) { + my @downloaded_invoices = $schema->resultset('EdifactMessage')->search( + { + message_type => 'INVOICE', + status => 'new', + } + )->all; + + foreach my $invoice (@downloaded_invoices) { + my $filename = $invoice->filename(); + $logger->trace("Processing invoice $filename"); + + my $plugin_used = 0; + if ( my $plugin_class = $invoice->edi_acct->plugin ) { + my $plugin = $plugin_class->new(); + if ( $plugin->can('edifact_process_invoice') ) { + $plugin_used = 1; + Koha::Plugins::Handler->run( + { + class => $plugin_class, + method => 'edifact_process_invoice', + params => { + invoice => $invoice, + } } - } - ); + ); + } } - } - process_invoice($invoice) unless $plugin_used; + process_invoice($invoice) unless $plugin_used; + } } my @downloaded_responses = $schema->resultset('EdifactMessage')->search( -- 2.21.0 (Apple Git-122)