Bugzilla – Attachment 96905 Details for
Bug 22784
Add the ability to archive purchase suggestions
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 22784: Add a cronjob to archive suggestions given age or status criteria
Bug-22784-Add-a-cronjob-to-archive-suggestions-giv.patch (text/plain), 7.22 KB, created by
ByWater Sandboxes
on 2020-01-07 15:27:26 UTC
(
hide
)
Description:
Bug 22784: Add a cronjob to archive suggestions given age or status criteria
Filename:
MIME Type:
Creator:
ByWater Sandboxes
Created:
2020-01-07 15:27:26 UTC
Size:
7.22 KB
patch
obsolete
>From 62b1dc6648f0744bf28a91be61283e3353e7c19b Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@bugs.koha-community.org> >Date: Thu, 14 Nov 2019 16:41:40 +0100 >Subject: [PATCH] Bug 22784: Add a cronjob to archive suggestions given age or > status criteria >MIME-Version: 1.0 >Content-Type: text/plain; charset=UTF-8 >Content-Transfer-Encoding: 8bit > >In order to deal automatically with suggestions that need to be >archived, this cronjob will help to add the "archived" flag following >their age or status. > >Test plan: >- Execute the script with the --help parameter and read the documentation. >- Does it make sense? >- Use it without the --confirm flag and try several combination > >For instance you will want to archive suggestions that have been >rejected for more than a week: > perl misc/cronjobs/archive_purchase_suggestions.pl > --age-date-field=rejecteddate --age=weeks:1 > >or even suggestion that have been suggested for more than a year and >have a ORDERED status: > perl misc/cronjobs/archive_purchase_suggestions.pl > --age-date-field=suggesteddate --age=years:1 --status=ORDERED > >- Use it with the --confirm flag and make sure the suggestions have been >archived. > >Sponsored-by: BULAC - http://www.bulac.fr/ >Signed-off-by: Séverine QUEUNE <severine.queune@bulac.fr> > >Signed-off-by: Kelly McElligott <kelly@bywatersolutions.com> >--- > misc/cronjobs/archive_purchase_suggestions.pl | 187 ++++++++++++++++++++++++++ > 1 file changed, 187 insertions(+) > create mode 100755 misc/cronjobs/archive_purchase_suggestions.pl > >diff --git a/misc/cronjobs/archive_purchase_suggestions.pl b/misc/cronjobs/archive_purchase_suggestions.pl >new file mode 100755 >index 0000000000..7327f92d7a >--- /dev/null >+++ b/misc/cronjobs/archive_purchase_suggestions.pl >@@ -0,0 +1,187 @@ >+#!/usr/bin/perl >+ >+use Modern::Perl; >+ >+use Pod::Usage; >+use Getopt::Long; >+ >+use Koha::Script -cron; >+ >+use Koha::DateUtils qw( dt_from_string output_pref ); >+use Koha::Suggestions; >+use C4::Koha; >+ >+my ( $help, $verbose, $confirm, $age, $age_date_field, @statuses ); >+GetOptions( >+ 'h|help' => \$help, >+ 'v|verbose' => \$verbose, >+ 'age:s' => \$age, >+ 'age-date-field:s' => \$age_date_field, >+ 'status:s' => \@statuses, >+ 'c|confirm' => \$confirm, >+) || pod2usage( verbose => 2 ); >+ >+if ($help) { >+ pod2usage( verbose => 2 ); >+} >+ >+unless ( $age or @statuses ) { >+ pod2usage(q{At least --age or --status must be provided}); >+ exit; >+} >+ >+unless ($confirm) { >+ say "Doing a dry run; no suggestion will be modified."; >+ say "Run again with --confirm to modify suggestions."; >+ $verbose = 1 unless $verbose; >+} >+ >+my $params = { archived => 0 }; >+ >+my @available_statuses; >+if (@statuses) { >+ @available_statuses = map { $_->{authorised_value} } @{ GetAuthorisedValues('SUGGEST_STATUS') }; >+ push @available_statuses, qw( ASKED ACCEPTED CHECKED REJECTED ORDERED AVAILABLE ); >+ my @unknown_statuses; >+ for my $status (@statuses) { >+ push @unknown_statuses, $status >+ if !grep { $_ eq $status } @available_statuses; >+ } >+ if (@unknown_statuses) { >+ pod2usage( >+ sprintf( >+ "%s (%s)\nValid statuses are: %s", >+ 'Invalid status ', >+ join( ', ', @unknown_statuses ), >+ join( ', ', @available_statuses ), >+ ) >+ ); >+ exit; >+ } >+ >+ $params->{STATUS} = { -in => \@statuses } if @statuses; >+} >+ >+if ($age_date_field) { >+ if ( !grep { $_ eq $age_date_field } >+ qw( suggesteddate manageddate accepteddate rejecteddate lastmodificationdate) >+ ) >+ { >+ pod2usage( sprintf( "The parameter for --age-field (%s) is invalid", $age_date_field ) ); >+ exit; >+ } >+} >+else { >+ $age_date_field = 'manageddate'; >+} >+ >+my $date = dt_from_string; >+if ($age) { >+ if ( $age =~ m|^(\d)$| || $age =~ m|^days:(\d+)$| ) { >+ $date->subtract( days => $1 ); >+ } >+ elsif ( $age =~ m|^hours:(\d+)$| ) { >+ $date->subtract( hours => $1 ); >+ } >+ elsif ( $age =~ m|^weeks:(\d+)$| ) { >+ $date->subtract( weeks => $1 ); >+ } >+ elsif ( $age =~ m|^months:(\d+)$| ) { >+ $date->subtract( months => $1 ); >+ } >+ elsif ( $age =~ m|^years:(\d+)$| ) { >+ $date->subtract( years => $1 ); >+ } >+ else { >+ pod2usage( sprintf( "The parameter for --age (%s) is invalid", $age ) ); >+ exit; >+ } >+ my $dtf = Koha::Database->new->schema->storage->datetime_parser; >+ $params->{$age_date_field} = { '<=' => $dtf->format_date($date) }; >+} >+my $suggestions = Koha::Suggestions->search($params); >+say sprintf( "Found %d suggestions", $suggestions->count ) >+ . ( >+ exists $params->{$age_date_field} ? sprintf( " with %s older than %s", >+ $age_date_field, output_pref( { dt => $date, dateonly => 1 } ) ) >+ : "" >+ ) >+ . ( >+ exists $params->{status} >+ ? sprintf( " and one of the following statuses: %s", >+ join( ', ', @available_statuses ) ) >+ : "" >+ ) if $verbose; >+ >+while ( my $suggestion = $suggestions->next ) { >+ if ($confirm) { >+ say sprintf( "Archiving suggestion %s", $suggestion->suggestionid ) >+ if $verbose; >+ $suggestion->update( { archived => 1 } ); >+ } >+ else { >+ say sprintf( "Suggestion %s would have been archived", >+ $suggestion->suggestionid ); >+ } >+} >+ >+=head1 NAME >+ >+archive_purchase_suggestions.pl - Archive purchase suggestions given their age and status >+ >+=head1 SYNOPSIS >+ >+archive_purchase_suggestions.pl [-h|--help] [-v|--verbose] [-c|--confirm] [--age=AGE] [--age-date-field=DATE_FIELD] [--status=STATUS] >+ >+=head1 OPTIONS >+ >+=over >+ >+=item B<-h|--help> >+ >+Print a brief help message >+ >+=item B<-c|--confirm> >+ >+This flag must be provided in order for the script to actually >+archive purchase suggestions. If it is not supplied, the script will >+only report on the suggestions it would have archived. >+ >+=item B<--age> >+ >+It must contain an integer representing the number of days elapsed since the suggestions has been modified. You can use it along with B<--age-date-field> to specify the database column you want to apply this number. >+ >+You can also provide a number of hours, days, weeks, months or years. Like --age=months:1 to archive purchase suggestions older than a month. >+ >+=item B<--age-date-field> >+ >+You can specify one of the date fields of suggestions: suggesteddate, manageddate, accepteddate, rejecteddate or lastmodificationdate. Default is manageddate. >+ >+=item B<--status> >+ >+It must be one of the 6 default statuses (ASKED, ACCEPTED, CHECKED, REJECTED, ORDERED or AVAILABLE), or one define in the SUGGEST_STATUS authorized value's category. >+ >+Can be passed several times. >+ >+=item B<-v|--verbose> >+ >+Verbose mode. >+ >+=back >+ >+=head1 AUTHOR >+ >+Jonathan Druart <jonathan.druart@bugs.koha-community.org> >+ >+=head1 LICENSE >+ >+This file is part of Koha. >+ >+Koha is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software >+Foundation; either version 3 of the License, or (at your option) any later version. >+ >+You should have received a copy of the GNU General Public License along >+with Koha; if not, write to the Free Software Foundation, Inc., >+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. >+ >+=cut >-- >2.11.0
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 22784
:
95499
|
95500
|
95501
|
95502
|
95510
|
95511
|
95512
|
95513
|
95533
|
95534
|
95535
|
95536
|
95537
|
95538
|
96900
|
96901
|
96902
|
96903
|
96904
|
96905
|
100806
|
100807
|
100808
|
100809
|
100810
|
100811
|
100854
|
100855
|
100856
|
100857
|
100858
|
100859
|
101948
|
102779
|
102780
|
102781
|
102782
|
102783
|
102784
|
102785
|
102786
|
102944