From a0743c59dfd314d5628b2e697fa1dfed605c4def 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 Signed-off-by: Debi Stears --- acqui/edifactmsgs.pl | 27 ++++++++++- installer/data/mysql/atomicupdate/bug_23682.perl | 10 ++++ installer/data/mysql/sysprefs.sql | 1 + .../prog/en/modules/acqui/edifactmsgs.tt | 3 ++ .../en/modules/admin/preferences/acquisitions.pref | 8 ++++ misc/cronjobs/edi_cron.pl | 55 +++++++++++----------- 6 files changed, 75 insertions(+), 29 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_23682.perl diff --git a/acqui/edifactmsgs.pl b/acqui/edifactmsgs.pl index 20baa5f3d6..85b065d68e 100755 --- a/acqui/edifactmsgs.pl +++ b/acqui/edifactmsgs.pl @@ -19,10 +19,12 @@ use Modern::Perl; use CGI; -use Koha::Database; -use C4::Koha; + use C4::Auth; +use C4::Koha; use C4::Output; +use Koha::Database; +use Koha::Plugins::Handler; my $q = CGI->new; my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user( @@ -45,6 +47,27 @@ 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 ) { + $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 d1efc4b42c..338ea3aa5c 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -170,6 +170,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 9d9fe823a2..3e7bfa4558 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 @@ -122,3 +122,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 79cbaaa2a9..b5123d448c 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.11.0