From fe7eb3c35a3886ec230c19b25fa7f8878bd699ba Mon Sep 17 00:00:00 2001 From: Julian Maurice Date: Thu, 2 Aug 2012 16:03:32 +0200 Subject: [PATCH] Bug 9117: Reports hierarchies management improvements - Filter by groups using tabs - Filter by subgroups using a dropdown list under each tab - Allow to create new group and subgroups when building a new report or editing an existing report (no need to go through admin AV interface) + Possibility to duplicate a report (new link in the table) --- C4/Koha.pm | 21 + .../en/modules/reports/guided_reports_start.tt | 459 +++++++++++--------- reports/guided_reports.pl | 42 ++- 3 files changed, 315 insertions(+), 207 deletions(-) diff --git a/C4/Koha.pm b/C4/Koha.pm index d38729a..b90502b 100644 --- a/C4/Koha.pm +++ b/C4/Koha.pm @@ -63,6 +63,7 @@ BEGIN { &GetAuthorisedValueByCode &GetKohaImageurlFromAuthorisedValues &GetAuthValCode + &AddAuthorisedValue &GetNormalizedUPC &GetNormalizedISBN &GetNormalizedEAN @@ -1202,6 +1203,26 @@ sub GetKohaAuthorisedValueLib { return $value; } +=head2 AddAuthorisedValue + + AddAuthorisedValue($category, $authorised_value, $lib, $lib_opac); + +Create a new authorised value. + +=cut + +sub AddAuthorisedValue { + my ($category, $authorised_value, $lib, $lib_opac) = @_; + + my $dbh = C4::Context->dbh; + my $query = qq{ + INSERT INTO authorised_values (category, authorised_value, lib, lib_opac) + VALUES (?,?,?,?) + }; + my $sth = $dbh->prepare($query); + $sth->execute($category, $authorised_value, $lib, $lib_opac); +} + =head2 display_marc_indicators my $display_form = C4::Koha::display_marc_indicators($field); diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt index fa0ae38..60927ed 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt @@ -14,36 +14,107 @@ [% END %] [% END %] + [% INCLUDE 'doc-head-close.inc' %] [% INCLUDE 'calendar.inc' %] - - - + +[% INCLUDE 'datatables-strings.inc' %] + @@ -148,65 +250,78 @@ canned reports and writing custom SQL reports.

[% IF ( saved1 ) %] [% IF ( savedreports ) %]

Saved reports

-
-[% INCLUDE 'table-pager.inc' perpage='20' %] -
- - - - - - - - - - - - - - - [% IF (usecache) %] [% END %] - - - - - - - -[% FOREACH savedreport IN savedreports %] -[% UNLESS ( loop.odd ) %][% ELSE %][% END %] - - - - - - - - - -[% IF (savedreport.public) %] - -[% ELSE %] - -[% END %] -[% IF (usecache) %] [% END %] - - - - [% IF ( CAN_user_reports_create_reports ) %] - - [% END %] - -[% END %] - -
IDReport nameTypeAreaGroupSubgroupNotesAuthorCreation datePublicCache expiry (seconds)Saved resultsSaved SQL  
[% savedreport.id %][% savedreport.report_name %][% savedreport.type %][% savedreport.areaname %][% savedreport.groupname %][% savedreport.subgroupname %][% savedreport.notes %][% savedreport.borrowersurname %][% IF ( savedreport.borrowerfirstname ) %], [% savedreport.borrowerfirstname %][% END %] ([% savedreport.borrowernumber %])[% savedreport.date_created %]YesNo[% savedreport.cache_expiry %][% IF ( savedreport.date_run ) %][% savedreport.date_run %][% END %] - - Show - [% IF ( CAN_user_reports_create_reports ) %] -   Edit +
+
Run -ScheduleDelete
+ +
+
+ + +
+ + + + + + + + + + + + + [% IF (usecache) %] [% END %] + + + + + + + + [% FOREACH savedreport IN savedreports %] + + + + + + + + + + [% IF (savedreport.public) %] + + [% ELSE %] + + [% END %] + [% IF (usecache) %] [% END %] + + + + [% IF ( CAN_user_reports_create_reports ) %] + + [% END %] + + [% END %] + +
IDReport nameTypeGroupSubgroupNotesAuthorCreation datePublicCache expiry (seconds)Saved resultsSaved SQL  
[% savedreport.id %][% savedreport.report_name %][% savedreport.type %][% savedreport.groupname %][% savedreport.subgroupname %][% savedreport.notes %][% savedreport.borrowersurname %][% IF ( savedreport.borrowerfirstname ) %], [% savedreport.borrowerfirstname %][% END %] ([% savedreport.borrowernumber %])[% savedreport.date_created %]YesNo[% savedreport.cache_expiry %][% IF ( savedreport.date_run ) %][% savedreport.date_run %][% END %] + + Show + [% IF ( CAN_user_reports_create_reports ) %] + Edit + Duplicate + [% END %] + + Run + Schedule + Delete
+
+ [% ELSE %]
[% IF (filter_set) %]

No saved reports match your criteria.

@@ -518,31 +633,7 @@ canned reports and writing custom SQL reports.

Save your custom report
  1. - [% IF groups_with_subgroups %] -
  2. -
  3. - [% END %] + [% PROCESS group_and_subgroup_selection %]
@@ -618,31 +709,8 @@ $(document).ready(function() { [% IF ( reportname ) %] [% ELSE %][% END %] - [% IF groups_with_subgroups %] -
  • -
  • - [% END %] + [% PROCESS group_and_subgroup_selection %] + [% IF (public) %]
  • [% ELSE %] @@ -727,11 +795,6 @@ Sub report: @@ -739,31 +802,7 @@ $(document).ready(function() { Edit SQL report
    1. - [% IF groups_with_subgroups %] -
    2. -
    3. - [% END %] +[% PROCESS group_and_subgroup_selection %] [% IF (public) %]
    4. [% ELSE %] @@ -831,43 +870,12 @@ $(document).ready(function() { [% IF ( saved1 ) %]
      -

      Filter

        -
      1. - - -
      2. [% INCLUDE 'date-format.inc' %]
        @@ -903,3 +911,56 @@ $("#column_submit").submit(function() { //]]> [% INCLUDE 'intranet-bottom.inc' %] + + +[% BLOCK group_and_subgroup_selection %] +
      3. + + + + + + + + +
      4. +
      5. + + + + + + + + +
      6. +[% END %] diff --git a/reports/guided_reports.pl b/reports/guided_reports.pl index de18072..ed9aa6e 100755 --- a/reports/guided_reports.pl +++ b/reports/guided_reports.pl @@ -17,8 +17,6 @@ # with Koha; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -use strict; -use warnings; use CGI; use Text::CSV; @@ -106,6 +104,7 @@ elsif ( $phase eq 'Build new' ) { 'savedreports' => get_saved_reports($filter), 'usecache' => $usecache, 'groups_with_subgroups'=> groups_with_subgroups($group, $subgroup), + dateformat => C4::Context->preference('dateformat'), ); } @@ -178,6 +177,8 @@ elsif ( $phase eq 'Update SQL'){ push @errors, {cache_expiry => $cache_expiry}; } + create_non_existing_group_and_subgroup($input, $group, $subgroup); + if ($sql =~ /;?\W?(UPDATE|DELETE|DROP|INSERT|SHOW|CREATE)\W/i) { push @errors, {sqlerr => $1}; } @@ -482,6 +483,9 @@ elsif ( $phase eq 'Save Report' ) { if( $cache_expiry && $cache_expiry >= 2592000 ){ push @errors, {cache_expiry => $cache_expiry}; } + + create_non_existing_group_and_subgroup($input, $group, $subgroup); + ## FIXME this is AFTER entering a name to save the report under if ($sql =~ /;?\W?(UPDATE|DELETE|DROP|INSERT|SHOW|CREATE)\W/i) { push @errors, {sqlerr => $1}; @@ -730,9 +734,9 @@ elsif ( $phase eq 'Create report from SQL' ) { $group = $input->param('report_group'); $subgroup = $input->param('report_subgroup'); $template->param( - 'sql' => $input->param('sql'), - 'reportname' => $input->param('reportname'), - 'notes' => $input->param('notes'), + 'sql' => $input->param('sql') // '', + 'reportname' => $input->param('reportname') // '', + 'notes' => $input->param('notes') // '', ); } $template->param( @@ -786,13 +790,17 @@ sub groups_with_subgroups { my $groups_with_subgroups = get_report_groups(); my @g_sg; - while (my ($g_id, $v) = each %$groups_with_subgroups) { + my @sorted_keys = sort { + $groups_with_subgroups->{$a}->{name} cmp $groups_with_subgroups->{$b}->{name} + } keys %$groups_with_subgroups; + foreach my $g_id (@sorted_keys) { + my $v = $groups_with_subgroups->{$g_id}; my @subgroups; if (my $sg = $v->{subgroups}) { - while (my ($sg_id, $n) = each %$sg) { + foreach my $sg_id (sort { $sg->{$a} cmp $sg->{$b} } keys %$sg) { push @subgroups, { id => $sg_id, - name => $n, + name => $sg->{$sg_id}, selected => ($group && $g_id eq $group && $subgroup && $sg_id eq $subgroup ), }; } @@ -806,3 +814,21 @@ sub groups_with_subgroups { } return \@g_sg; } + +sub create_non_existing_group_and_subgroup { + my ($input, $group, $subgroup) = @_; + + if (defined $group and $group ne '') { + my $report_groups = C4::Reports::Guided::get_report_groups; + if (not exists $report_groups->{$group}) { + my $groupdesc = $input->param('groupdesc') // $group; + C4::Koha::AddAuthorisedValue('REPORT_GROUP', $group, $groupdesc); + } + if (defined $subgroup and $subgroup ne '') { + if (not exists $report_groups->{$group}->{subgroups}->{$subgroup}) { + my $subgroupdesc = $input->param('subgroupdesc') // $subgroup; + C4::Koha::AddAuthorisedValue('REPORT_SUBGROUP', $subgroup, $subgroupdesc, $group); + } + } + } +} -- 1.7.2.5