From d8696702cedb46e7667f9398165ee89627219809 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 Signed-off-by: Katrin Fischer Signed-off-by: Jonathan Druart --- acqui/edifactmsgs.pl | 28 +++++++++- .../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, 76 insertions(+), 29 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_23682.perl diff --git a/acqui/edifactmsgs.pl b/acqui/edifactmsgs.pl index 8f4ec63c4a..3d72404ca6 100755 --- a/acqui/edifactmsgs.pl +++ b/acqui/edifactmsgs.pl @@ -19,10 +19,13 @@ 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::EDI qw(process_invoice); +use Koha::Plugins::Handler; my $q = CGI->new; my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user( @@ -44,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 b9634398ee..91f17b5a95 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -174,6 +174,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 d24adfe9bb..daa04bcee9 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.39.5