View | Details | Raw Unified | Return to bug 16631
Collapse All | Expand All

(-)a/C4/UsageStats.pm (+1 lines)
Lines 314-319 sub _shared_preferences { Link Here
314
        autoMemberNum
314
        autoMemberNum
315
        BorrowerRenewalPeriodBase
315
        BorrowerRenewalPeriodBase
316
        EnableBorrowerFiles
316
        EnableBorrowerFiles
317
        EnableFilteringReports
317
        EnhancedMessagingPreferences
318
        EnhancedMessagingPreferences
318
        ExtendedPatronAttributes
319
        ExtendedPatronAttributes
319
        intranetreadinghistory
320
        intranetreadinghistory
(-)a/Koha/Manual.pm (+1 lines)
Lines 117-122 our $mapping = { Link Here
117
    'admin/preferences#logs'                   => '/logspreferences.html',
117
    'admin/preferences#logs'                   => '/logspreferences.html',
118
    'admin/preferences#opac'                   => '/opacpreferences.html',
118
    'admin/preferences#opac'                   => '/opacpreferences.html',
119
    'admin/preferences#patrons'                => '/patronspreferences.html',
119
    'admin/preferences#patrons'                => '/patronspreferences.html',
120
    'admin/preferences#reports'                => '/reportspreferences.html',
120
    'admin/preferences#searching'              => '/searchingpreferences.html',
121
    'admin/preferences#searching'              => '/searchingpreferences.html',
121
    'admin/preferences#serials'                => '/serialspreferences.html',
122
    'admin/preferences#serials'                => '/serialspreferences.html',
122
    'admin/preferences#staff_interface'        => '/staffclientpreferences.html',
123
    'admin/preferences#staff_interface'        => '/staffclientpreferences.html',
(-)a/Koha/Report.pm (-1 / +19 lines)
Lines 20-28 use Modern::Perl; Link Here
20
use Koha::Database;
20
use Koha::Database;
21
use Koha::Reports;
21
use Koha::Reports;
22
22
23
use Koha::Object;
24
use Koha::Object::Limit::Library;
25
26
use base qw(Koha::Object Koha::Object::Limit::Library);
27
23
#use Koha::DateUtils qw( dt_from_string output_pref );
28
#use Koha::DateUtils qw( dt_from_string output_pref );
24
29
25
use base qw(Koha::Object);
26
#
30
#
27
# FIXME We could only return an error code instead of the arrayref
31
# FIXME We could only return an error code instead of the arrayref
28
# Only 1 error is returned
32
# Only 1 error is returned
Lines 268-271 sub _type { Link Here
268
    return 'SavedSql';
272
    return 'SavedSql';
269
}
273
}
270
274
275
=head3 _library_limits
276
277
Configurable library limits
278
279
=cut
280
281
sub _library_limits {
282
    return {
283
        class   => "ReportsBranch",
284
        id      => "report_id",
285
        library => "branchcode",
286
    };
287
}
288
271
1;
289
1;
(-)a/Koha/Reports.pm (-1 / +26 lines)
Lines 21-27 use Koha::Database; Link Here
21
21
22
use Koha::Report;
22
use Koha::Report;
23
23
24
use base qw(Koha::Objects);
24
use base qw(Koha::Objects Koha::Objects::Limit::Library);
25
25
26
=head1 NAME
26
=head1 NAME
27
27
Lines 33-38 Koha::Reports - Koha Report Object set class Link Here
33
33
34
=cut
34
=cut
35
35
36
=head3 search_with_localization
37
38
=cut
39
40
sub search_with_localization {
41
    my ( $self, $params, $attributes ) = @_;
42
43
    my $language = C4::Languages::getlanguage();
44
    $Koha::Schema::Result::Itemtype::LANGUAGE = $language;
45
    $attributes->{order_by}                   = 'translated_description' unless exists $attributes->{order_by};
46
    $attributes->{join}                       = 'localization';
47
    $attributes->{'+select'}                  = [
48
        {
49
            coalesce => [qw( localization.translation me.description )],
50
            -as      => 'translated_description'
51
        }
52
    ];
53
    if ( defined $params->{branchcode} ) {
54
        my $branchcode = delete $params->{branchcode};
55
        $self->search_with_library_limits( $params, $attributes, $branchcode );
56
    } else {
57
        $self->SUPER::search( $params, $attributes );
58
    }
59
}
60
36
=head3 _type
61
=head3 _type
37
62
38
Returns name of corresponding DBIC resultset
63
Returns name of corresponding DBIC resultset
(-)a/installer/data/mysql/atomicupdate/bug_16631.pl (+31 lines)
Line 0 Link Here
1
use Modern::Perl;
2
use Koha::Installer::Output qw(say_warning say_success say_info);
3
4
return {
5
    bug_number  => "16631",
6
    description => "Add library limits to reports",
7
    up          => sub {
8
        my ($args) = @_;
9
        my ( $dbh, $out ) = @$args{qw(dbh out)};
10
11
        $dbh->do(
12
            q{CREATE TABLE `reports_branches` (
13
            `report_id` int(11) NOT NULL,
14
            `branchcode` varchar(10) NOT NULL,
15
            KEY `report_id` (`report_id`),
16
            KEY `branchcode` (`branchcode`),
17
            CONSTRAINT `reports_branches_ibfk_1` FOREIGN KEY (`report_id`) REFERENCES `saved_sql` (`id`) ON DELETE CASCADE,
18
            CONSTRAINT `reports_branches_ibfk_2` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE
19
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci}
20
        );
21
22
        say $out "Added new table 'reports_branches'";
23
24
        $dbh->do(
25
            q{INSERT IGNORE INTO systempreferences
26
            (variable,value,options,explanation,type) VALUES ('EnableFilteringReports', '0', NULL, 'Enable ability for staff to filter report access based on home library.', 'YesNo')}
27
        );
28
29
        say $out "Added new system preference 'EnableFilteringReports'";
30
    },
31
};
(-)a/installer/data/mysql/kohastructure.sql (+13 lines)
Lines 5772-5777 CREATE TABLE `saved_reports` ( Link Here
5772
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
5772
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
5773
/*!40101 SET character_set_client = @saved_cs_client */;
5773
/*!40101 SET character_set_client = @saved_cs_client */;
5774
5774
5775
DROP TABLE IF EXISTS `reports_branches`;
5776
/*!40101 SET @saved_cs_client     = @@character_set_client */;
5777
/*!40101 SET character_set_client = utf8mb4 */;
5778
CREATE TABLE `reports_branches` (
5779
  `report_id` int(11) NOT NULL,
5780
  `branchcode` varchar(10) NOT NULL,
5781
  KEY `report_id` (`report_id`),
5782
  KEY `branchcode` (`branchcode`),
5783
  CONSTRAINT `reports_branches_ibfk_1` FOREIGN KEY (`report_id`) REFERENCES `saved_sql` (`id`) ON DELETE CASCADE,
5784
  CONSTRAINT `reports_branches_ibfk_2` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE
5785
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
5786
/*!40101 SET character_set_client = @saved_cs_client */;
5787
5775
--
5788
--
5776
-- Table structure for table `saved_sql`
5789
-- Table structure for table `saved_sql`
5777
--
5790
--
(-)a/installer/data/mysql/mandatory/sysprefs.sql (+1 lines)
Lines 253-258 INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` Link Here
253
('EnableAdvancedCatalogingEditor','0','','Enable the Rancor advanced cataloging editor','YesNo'),
253
('EnableAdvancedCatalogingEditor','0','','Enable the Rancor advanced cataloging editor','YesNo'),
254
('EnableBorrowerFiles','0',NULL,'If enabled, allows librarians to upload and attach arbitrary files to a borrower record.','YesNo'),
254
('EnableBorrowerFiles','0',NULL,'If enabled, allows librarians to upload and attach arbitrary files to a borrower record.','YesNo'),
255
('EnableExpiredPasswordReset', '0', NULL, 'Enable ability for patrons with expired password to reset their password directly', 'YesNo'),
255
('EnableExpiredPasswordReset', '0', NULL, 'Enable ability for patrons with expired password to reset their password directly', 'YesNo'),
256
('EnableFilteringReports', '0', NULL, 'Enable ability for staff to filter report access based on home library.', 'YesNo'),
256
('EnableItemGroupHolds','0','','Enable item groups holds feature','YesNo'),
257
('EnableItemGroupHolds','0','','Enable item groups holds feature','YesNo'),
257
('EnableItemGroups','0','','Enable the item groups feature','YesNo'),
258
('EnableItemGroups','0','','Enable the item groups feature','YesNo'),
258
('EnableOpacSearchHistory','1','YesNo','Enable or disable opac search history',''),
259
('EnableOpacSearchHistory','1','YesNo','Enable or disable opac search history',''),
(-)a/installer/data/mysql/mandatory/userpermissions.sql (+1 lines)
Lines 141-146 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
141
   (16, 'execute_reports', 'Execute SQL reports'),
141
   (16, 'execute_reports', 'Execute SQL reports'),
142
   (16, 'create_reports', 'Create SQL reports'),
142
   (16, 'create_reports', 'Create SQL reports'),
143
   (16, 'delete_reports', 'Delete SQL reports'),
143
   (16, 'delete_reports', 'Delete SQL reports'),
144
   (16, 'manage_report_filters', 'Manage report filters'),
144
   (18, 'manage_courses', 'Add, edit and delete courses'),
145
   (18, 'manage_courses', 'Add, edit and delete courses'),
145
   (18, 'add_reserves', 'Add course reserves'),
146
   (18, 'add_reserves', 'Add course reserves'),
146
   (18, 'delete_reserves', 'Remove course reserves'),
147
   (18, 'delete_reserves', 'Remove course reserves'),
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/permissions.inc (+3 lines)
Lines 487-492 Link Here
487
    [%- CASE 'execute_reports' -%]
487
    [%- CASE 'execute_reports' -%]
488
        <span class="sub_permission execute_reports_subpermission"> Execute SQL reports </span>
488
        <span class="sub_permission execute_reports_subpermission"> Execute SQL reports </span>
489
        <span class="permissioncode">([% name | html %])</span>
489
        <span class="permissioncode">([% name | html %])</span>
490
    [%- CASE 'manage_report_filters' -%]
491
        <span class="sub_permission manage_report_filters_subpermission"> Manage Report Filters </span>
492
        <span class="permissioncode">([% name | html %])</span>
490
    [%- CASE 'add_reserves' -%]
493
    [%- CASE 'add_reserves' -%]
491
        <span class="sub_permission add_reserves_subpermission"> Add course reserves </span>
494
        <span class="sub_permission add_reserves_subpermission"> Add course reserves </span>
492
        <span class="permissioncode">([% name | html %])</span>
495
        <span class="permissioncode">([% name | html %])</span>
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/prefs-menu.inc (+11 lines)
Lines 165-170 Link Here
165
            </li>
165
            </li>
166
        [% END %]
166
        [% END %]
167
167
168
        [% IF ( reports ) %]
169
            <li class="active">
170
                <a title="Reports" href="/cgi-bin/koha/admin/preferences.pl?tab=reports">Reports</a>
171
                [% PROCESS subtabs %]
172
            </li>
173
        [% ELSE %]
174
            <li>
175
                <a title="Reports" href="/cgi-bin/koha/admin/preferences.pl?tab=reports">Reports</a>
176
            </li>
177
        [% END %]
178
        
168
        [% IF ( searching ) %]
179
        [% IF ( searching ) %]
169
            <li class="active">
180
            <li class="active">
170
                <a title="Searching" href="/cgi-bin/koha/admin/preferences.pl?tab=searching">Searching</a>
181
                <a title="Searching" href="/cgi-bin/koha/admin/preferences.pl?tab=searching">Searching</a>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/reports.pref (+8 lines)
Line 0 Link Here
1
Reports:
2
    Reports Access:
3
     -
4
         - pref: EnableFilteringReports
5
           choices:
6
               1: Enable
7
               0: Disable
8
         - "filtering report access based on staff home library."
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt (-2 / +36 lines)
Lines 3-8 Link Here
3
[% USE AuthorisedValues %]
3
[% USE AuthorisedValues %]
4
[% USE KohaDates %]
4
[% USE KohaDates %]
5
[% USE Koha %]
5
[% USE Koha %]
6
[% USE Branches %]
6
[% USE TablesSettings %]
7
[% USE TablesSettings %]
7
[% USE HtmlScrubber %]
8
[% USE HtmlScrubber %]
8
[% USE JSON.Escape %]
9
[% USE JSON.Escape %]
Lines 234-239 Link Here
234
235
235
                [% IF ( saved1 ) %]
236
                [% IF ( saved1 ) %]
236
                    <h1>Saved reports</h1>
237
                    <h1>Saved reports</h1>
238
                    [% IF ( CAN_user_superlibrarian || CAN_user_reports_manage_report_filters ) %]
239
                        <form method="get" action="">
240
                            <input type="hidden" name="op" value="list" />
241
                            <label>
242
                                <input type="checkbox" name="show_all" id="show_all" value="1" [% IF show_all %]checked[% END %] />
243
                                Show all reports
244
                            </label>
245
                            <input type="submit" class="btn btn-primary" value="Apply" />
246
                        </form>
247
                    [% END %]
237
                    [% IF ( savedreports ) %]
248
                    [% IF ( savedreports ) %]
238
249
239
                        [% IF ( filters.date || filters.author || filters.keyword ) %]
250
                        [% IF ( filters.date || filters.author || filters.keyword ) %]
Lines 850-855 Link Here
850
                            <input type="hidden" name="reportname" value="[% reportname | html %]" />
861
                            <input type="hidden" name="reportname" value="[% reportname | html %]" />
851
                            <input type="hidden" name="group" value="[% group | html %]" />
862
                            <input type="hidden" name="group" value="[% group | html %]" />
852
                            <input type="hidden" name="subgroup" value="[% subgroup | html %]" />
863
                            <input type="hidden" name="subgroup" value="[% subgroup | html %]" />
864
                            <input type="hidden" name="branches" value="[% branches | html %]" />
853
                            <input type="hidden" name="notes" value="[% notes | scrub_html type => 'note' | $raw %]" />
865
                            <input type="hidden" name="notes" value="[% notes | scrub_html type => 'note' | $raw %]" />
854
                            <input type="hidden" name="cache_expiry" value="[% cache_expiry | html %]" />
866
                            <input type="hidden" name="cache_expiry" value="[% cache_expiry | html %]" />
855
                            <input type="hidden" name="cache_expiry_units" value="[% cache_expiry_units | html %]" />
867
                            <input type="hidden" name="cache_expiry_units" value="[% cache_expiry_units | html %]" />
Lines 1434-1440 Link Here
1434
                                <span class="required">Required</span>
1446
                                <span class="required">Required</span>
1435
                            </div>
1447
                            </div>
1436
                        </fieldset>
1448
                        </fieldset>
1437
1449
                        [% IF ( Koha.Preference('EnableFilteringReports') && ( CAN_user_superlibrarian || CAN_user_reports_manage_report_filters ) ) %]
1450
                            <fieldset class="rows">
1451
                                <legend>Library limitation:</legend>
1452
                                <div
1453
                                    ><label for="library_limitation">Library limitation: </label>
1454
                                    <select id="library_limitation" name="branches" multiple size="10">
1455
                                        [% PROCESS options_for_libraries libraries => Branches.all( selected => report.get_library_limits, unfiltered => 1, do_not_select_my_library => 1 ) %]
1456
                                    </select>
1457
                                    <div class="hint">Limits the use of this report to the selected libraries.</div>
1458
                                </div>
1459
                            </fieldset>
1460
                        [% END %]
1438
                        <fieldset class="action">
1461
                        <fieldset class="action">
1439
                            <input type="hidden" name="op" value="cud-save" />
1462
                            <input type="hidden" name="op" value="cud-save" />
1440
                            <input type="submit" name="submit" class="btn btn-primary" value="Save report" />
1463
                            <input type="submit" name="submit" class="btn btn-primary" value="Save report" />
Lines 1548-1554 Link Here
1548
                            <br />
1571
                            <br />
1549
                            <span class="required" style="margin-left:30px;">Required</span>
1572
                            <span class="required" style="margin-left:30px;">Required</span>
1550
                        </fieldset>
1573
                        </fieldset>
1551
1574
                        [% IF ( Koha.Preference('EnableFilteringReports') && ( CAN_user_superlibrarian || CAN_user_reports_manage_report_filters ) ) %]
1575
                            <fieldset class="rows">
1576
                                <legend>Library limitation:</legend>
1577
                                <div
1578
                                    ><label for="library_limitation">Library limitation: </label>
1579
                                    <select id="library_limitation" name="branches" multiple size="10">
1580
                                        [% PROCESS options_for_libraries libraries => Branches.all( selected => report.get_library_limits, unfiltered => 1, do_not_select_my_library => 1 ) %]
1581
                                    </select>
1582
                                    <div class="hint">Limits the use of this report to the selected libraries.</div>
1583
                                </div>
1584
                            </fieldset>
1585
                        [% END %]
1552
                        <fieldset class="action">
1586
                        <fieldset class="action">
1553
                            <button class="btn btn-primary" type="submit" name="op" value="cud-update_sql">Update SQL</button>
1587
                            <button class="btn btn-primary" type="submit" name="op" value="cud-update_sql">Update SQL</button>
1554
                            <button class="btn btn-default" type="submit" name="op" value="cud-update_and_run_sql">Update and run SQL</button>
1588
                            <button class="btn btn-default" type="submit" name="op" value="cud-update_and_run_sql">Update and run SQL</button>
(-)a/reports/guided_reports.pl (-24 / +73 lines)
Lines 95-100 if ( $input->param("filter_set") or $input->param('clear_filters') ) { Link Here
95
    $filter = $session->param('report_filter');
95
    $filter = $session->param('report_filter');
96
}
96
}
97
97
98
my $show_all = $input->param('show_all');
99
$template->param( show_all => $show_all );
100
98
my @errors = ();
101
my @errors = ();
99
if ( !$op ) {
102
if ( !$op ) {
100
    $template->param( 'start' => 1 );
103
    $template->param( 'start' => 1 );
Lines 127-133 if ( !$op ) { Link Here
127
        'showsql'       => 1,
130
        'showsql'       => 1,
128
        'mana_success'  => scalar $input->param('mana_success'),
131
        'mana_success'  => scalar $input->param('mana_success'),
129
        'mana_id'       => $report->{mana_id},
132
        'mana_id'       => $report->{mana_id},
130
        'mana_comments' => $report->{comments}
133
        'mana_comments' => $report->{comments},
131
    );
134
    );
132
135
133
} elsif ( $op eq 'edit_form' ) {
136
} elsif ( $op eq 'edit_form' ) {
Lines 148-158 if ( !$op ) { Link Here
148
        'editsql'               => 1,
151
        'editsql'               => 1,
149
        'mana_id'               => $report->{mana_id},
152
        'mana_id'               => $report->{mana_id},
150
        'mana_comments'         => $report->{comments},
153
        'mana_comments'         => $report->{comments},
151
        'tables'                => $tables
154
        'tables'                => $tables,
155
        'report'                => $report,
152
    );
156
    );
153
157
154
} elsif ( $op eq 'cud-update_sql' || $op eq 'cud-update_and_run_sql' ) {
158
} elsif ( $op eq 'cud-update_sql' || $op eq 'cud-update_and_run_sql' ) {
155
    my $id                 = $input->param('id');
159
    my $id                 = $input->param('id');
160
    my $report             = Koha::Reports->find($id);
156
    my $sql                = $input->param('sql');
161
    my $sql                = $input->param('sql');
157
    my $reportname         = $input->param('reportname');
162
    my $reportname         = $input->param('reportname');
158
    my $group              = $input->param('group');
163
    my $group              = $input->param('group');
Lines 163-169 if ( !$op ) { Link Here
163
    my $public             = $input->param('public');
168
    my $public             = $input->param('public');
164
    my $save_anyway        = $input->param('save_anyway');
169
    my $save_anyway        = $input->param('save_anyway');
165
    my @errors;
170
    my @errors;
166
    my $tables = get_tables();
171
    my $tables   = get_tables();
172
    my @branches = grep { $_ ne q{} } $input->multi_param('branches');
167
173
168
    # if we have the units, then we came from creating a report from SQL and thus need to handle converting units
174
    # if we have the units, then we came from creating a report from SQL and thus need to handle converting units
169
    if ($cache_expiry_units) {
175
    if ($cache_expiry_units) {
Lines 211-216 if ( !$op ) { Link Here
211
                'problematic_authvals' => $problematic_authvals,
217
                'problematic_authvals' => $problematic_authvals,
212
                'warn_authval_problem' => 1,
218
                'warn_authval_problem' => 1,
213
                'phase_update'         => 1,
219
                'phase_update'         => 1,
220
                'branches'             => @branches,
221
                'report'               => $report,
214
            );
222
            );
215
223
216
        } else {
224
        } else {
Lines 225-234 if ( !$op ) { Link Here
225
                    subgroup     => $subgroup,
233
                    subgroup     => $subgroup,
226
                    notes        => $notes,
234
                    notes        => $notes,
227
                    public       => $public,
235
                    public       => $public,
228
                    cache_expiry => $cache_expiry,
236
                    cache_expiry => $cache_expiry
229
                }
237
                }
230
            );
238
            );
231
239
240
            $report->store;
241
            $report->replace_library_limits( \@branches );
242
232
            my $editsql = 1;
243
            my $editsql = 1;
233
            if ( $op eq 'cud-update_and_run_sql' ) {
244
            if ( $op eq 'cud-update_and_run_sql' ) {
234
                $editsql = 0;
245
                $editsql = 0;
Lines 245-251 if ( !$op ) { Link Here
245
                'cache_expiry'          => $cache_expiry,
256
                'cache_expiry'          => $cache_expiry,
246
                'public'                => $public,
257
                'public'                => $public,
247
                'usecache'              => $usecache,
258
                'usecache'              => $usecache,
248
                'tables'                => $tables
259
                'tables'                => $tables,
260
                'report'                => $report
249
            );
261
            );
250
            logaction( "REPORTS", "MODIFY", $id, "$reportname | $sql" ) if C4::Context->preference("ReportsLog");
262
            logaction( "REPORTS", "MODIFY", $id, "$reportname | $sql" ) if C4::Context->preference("ReportsLog");
251
        }
263
        }
Lines 514-519 if ( !$op ) { Link Here
514
    my $public             = $input->param('public');
526
    my $public             = $input->param('public');
515
    my $save_anyway        = $input->param('save_anyway');
527
    my $save_anyway        = $input->param('save_anyway');
516
    my $tables             = get_tables();
528
    my $tables             = get_tables();
529
    my @branches           = grep { $_ ne q{} } $input->multi_param('branches');
517
530
518
    # if we have the units, then we came from creating a report from SQL and thus need to handle converting units
531
    # if we have the units, then we came from creating a report from SQL and thus need to handle converting units
519
    if ($cache_expiry_units) {
532
    if ($cache_expiry_units) {
Lines 591-596 if ( !$op ) { Link Here
591
                    public         => $public,
604
                    public         => $public,
592
                }
605
                }
593
            );
606
            );
607
            my $report = Koha::Reports->find($id);
608
            $report->replace_library_limits( \@branches );
609
594
            logaction( "REPORTS", "ADD", $id, "$name | $sql" ) if C4::Context->preference("ReportsLog");
610
            logaction( "REPORTS", "ADD", $id, "$name | $sql" ) if C4::Context->preference("ReportsLog");
595
            $template->param(
611
            $template->param(
596
                'save_successful'       => 1,
612
                'save_successful'       => 1,
Lines 603-609 if ( !$op ) { Link Here
603
                'cache_expiry'          => $cache_expiry,
619
                'cache_expiry'          => $cache_expiry,
604
                'public'                => $public,
620
                'public'                => $public,
605
                'usecache'              => $usecache,
621
                'usecache'              => $usecache,
606
                'tables'                => $tables
622
                'tables'                => $tables,
623
                'report'                => $report,
607
            );
624
            );
608
        }
625
        }
609
    }
626
    }
Lines 746-765 if ( !$op ) { Link Here
746
763
747
} elsif ( $op eq 'add_form_sql' || $op eq 'duplicate' ) {
764
} elsif ( $op eq 'add_form_sql' || $op eq 'duplicate' ) {
748
765
749
    my ( $group, $subgroup, $sql, $reportname, $notes );
766
    my ( $group, $subgroup, $sql, $reportname, $notes, @branches, $report );
750
    if ( $input->param('sql') ) {
767
    if ( $input->param('sql') ) {
751
        $group      = $input->param('report_group');
768
        $group      = $input->param('report_group');
752
        $subgroup   = $input->param('report_subgroup');
769
        $subgroup   = $input->param('report_subgroup');
753
        $sql        = $input->param('sql')        // '';
770
        $sql        = $input->param('sql')        // '';
754
        $reportname = $input->param('reportname') // '';
771
        $reportname = $input->param('reportname') // '';
755
        $notes      = $input->param('notes')      // '';
772
        $notes      = $input->param('notes')      // '';
773
        @branches   = grep { $_ ne q{} } $input->multi_param('branches');
774
756
    } elsif ( my $report_id = $input->param('id') ) {
775
    } elsif ( my $report_id = $input->param('id') ) {
757
        my $report = Koha::Reports->find($report_id);
776
        $report     = Koha::Reports->find($report_id);
758
        $group      = $report->report_group;
777
        $group      = $report->report_group;
759
        $subgroup   = $report->report_subgroup;
778
        $subgroup   = $report->report_subgroup;
760
        $sql        = $report->savedsql    // '';
779
        $sql        = $report->savedsql    // '';
761
        $reportname = $report->report_name // '';
780
        $reportname = $report->report_name // '';
762
        $notes      = $report->notes       // '';
781
        $notes      = $report->notes       // '';
782
        @branches   = grep { $_ ne q{} } $input->multi_param('branches');
783
763
    }
784
    }
764
785
765
    my $tables = get_tables();
786
    my $tables = get_tables();
Lines 774-779 if ( !$op ) { Link Here
774
        'cache_expiry'          => 300,
795
        'cache_expiry'          => 300,
775
        'usecache'              => $usecache,
796
        'usecache'              => $usecache,
776
        'tables'                => $tables,
797
        'tables'                => $tables,
798
        'report'                => $report,
777
799
778
    );
800
    );
779
}
801
}
Lines 1081-1104 if ( $op eq 'list' || $op eq 'convert' ) { Link Here
1081
    my $subgroup = $input->param('subgroup');
1103
    my $subgroup = $input->param('subgroup');
1082
    $filter->{group}    = $group;
1104
    $filter->{group}    = $group;
1083
    $filter->{subgroup} = $subgroup;
1105
    $filter->{subgroup} = $subgroup;
1084
    my $reports = get_saved_reports($filter);
1106
1085
    my $has_obsolete_reports;
1107
    my $pref_enable_filtering_reports = C4::Context->preference("EnableFilteringReports");
1086
    for my $report (@$reports) {
1108
    if ( !$show_all && $pref_enable_filtering_reports == "1" ) {
1087
        $report->{results} = C4::Reports::Guided::get_results( $report->{id} );
1109
        my $reports_with_library_limits_results =
1088
        if ( $report->{savedsql} =~ m|biblioitems| and $report->{savedsql} =~ m|marcxml| ) {
1110
            Koha::Reports->search_with_library_limits( {}, {}, C4::Context::mybranch() );
1089
            $report->{seems_obsolete} = 1;
1111
        my $reports_list = $reports_with_library_limits_results->unblessed;
1090
            $has_obsolete_reports++;
1112
        my $has_obsolete_reports;
1113
        while ( my $report = $reports_with_library_limits_results->next ) {
1114
            $report->{results} = C4::Reports::Guided::get_results( $report->{id} );
1115
            if ( $report->{savedsql} =~ m|biblioitems| and $report->{savedsql} =~ m|marcxml| ) {
1116
                $report->{seems_obsolete} = 1;
1117
                $has_obsolete_reports++;
1118
            }
1119
            $template->param(
1120
                'manamsg'               => $input->param('manamsg') || '',
1121
                'saved1'                => 1,
1122
                'savedreports'          => $reports_list,
1123
                'usecache'              => $usecache,
1124
                'groups_with_subgroups' => groups_with_subgroups( $group, $subgroup ),
1125
                filters                 => $filter,
1126
                has_obsolete_reports    => $has_obsolete_reports,
1127
            );
1128
        }
1129
    } else {
1130
1131
        my $reports = get_saved_reports($filter);
1132
        my $has_obsolete_reports;
1133
1134
        for my $report (@$reports) {
1135
            $report->{results} = C4::Reports::Guided::get_results( $report->{id} );
1136
            if ( $report->{savedsql} =~ m|biblioitems| and $report->{savedsql} =~ m|marcxml| ) {
1137
                $report->{seems_obsolete} = 1;
1138
                $has_obsolete_reports++;
1139
            }
1091
        }
1140
        }
1141
        $template->param(
1142
            'manamsg'               => $input->param('manamsg') || '',
1143
            'saved1'                => 1,
1144
            'savedreports'          => $reports,
1145
            'usecache'              => $usecache,
1146
            'groups_with_subgroups' => groups_with_subgroups( $group, $subgroup ),
1147
            filters                 => $filter,
1148
            has_obsolete_reports    => $has_obsolete_reports,
1149
        );
1092
    }
1150
    }
1093
    $template->param(
1094
        'manamsg'               => $input->param('manamsg') || '',
1095
        'saved1'                => 1,
1096
        'savedreports'          => $reports,
1097
        'usecache'              => $usecache,
1098
        'groups_with_subgroups' => groups_with_subgroups( $group, $subgroup ),
1099
        filters                 => $filter,
1100
        has_obsolete_reports    => $has_obsolete_reports,
1101
    );
1102
}
1151
}
1103
1152
1104
# pass $sth, get back an array of names for the column headers
1153
# pass $sth, get back an array of names for the column headers
(-)a/t/Koha/Auth/Permissions.t (+2 lines)
Lines 63-68 subtest 'normal staff user test' => sub { Link Here
63
        'CAN_user_reports_create_reports'                    => 1,
63
        'CAN_user_reports_create_reports'                    => 1,
64
        'CAN_user_reports_delete_reports'                    => 1,
64
        'CAN_user_reports_delete_reports'                    => 1,
65
        'CAN_user_reports_execute_reports'                   => 1,
65
        'CAN_user_reports_execute_reports'                   => 1,
66
        'CAN_user_reports_manage_report_filters'             => 1,
66
    };
67
    };
67
    is_deeply( $authz, $expected, 'Expected permissions generated for normal staff user' );
68
    is_deeply( $authz, $expected, 'Expected permissions generated for normal staff user' );
68
};
69
};
Lines 228-233 subtest 'superlibrarian tests' => sub { Link Here
228
        'CAN_user_reports_create_reports'                           => 1,
229
        'CAN_user_reports_create_reports'                           => 1,
229
        'CAN_user_reports_delete_reports'                           => 1,
230
        'CAN_user_reports_delete_reports'                           => 1,
230
        'CAN_user_reports_execute_reports'                          => 1,
231
        'CAN_user_reports_execute_reports'                          => 1,
232
        'CAN_user_reports_manage_report_filters'                    => 1,
231
        'CAN_user_reports'                                          => 1,
233
        'CAN_user_reports'                                          => 1,
232
        'CAN_user_reserveforothers_modify_holds_priority'           => 1,
234
        'CAN_user_reserveforothers_modify_holds_priority'           => 1,
233
        'CAN_user_reserveforothers_place_holds'                     => 1,
235
        'CAN_user_reserveforothers_place_holds'                     => 1,
(-)a/t/db_dependent/Koha/Reports.t (-2 / +37 lines)
Lines 18-24 Link Here
18
use Modern::Perl;
18
use Modern::Perl;
19
19
20
use Test::NoWarnings;
20
use Test::NoWarnings;
21
use Test::More tests => 9;
21
use Test::More tests => 10;
22
22
23
use Koha::Report;
23
use Koha::Report;
24
use Koha::Reports;
24
use Koha::Reports;
Lines 185-188 subtest '_might_add_limit' => sub { Link Here
185
    );
185
    );
186
};
186
};
187
187
188
subtest 'reports_branches are added and removed from report_branches table' => sub {
189
    plan tests => 4;
190
191
    my $updated_nb_of_reports = Koha::Reports->search->count;
192
    my $report                = Koha::Report->new(
193
        {
194
            report_name => 'report_name_for_test_1',
195
            savedsql    => 'SELECT * FROM items WHERE itemnumber IN <<Test|list>>',
196
        }
197
    )->store;
198
199
    my $id       = $report->id;
200
    my $library1 = $builder->build_object( { class => 'Koha::Libraries' } );
201
    my $library2 = $builder->build_object( { class => 'Koha::Libraries' } );
202
    my $library3 = $builder->build_object( { class => 'Koha::Libraries' } );
203
    my @branches = ( $library1->branchcode, $library2->branchcode, $library3->branchcode );
204
205
    $report->replace_library_limits( \@branches );
206
207
    my @branches_loop = $report->get_library_limits->as_list;
208
    is( scalar @branches_loop, 3, '3 branches added to report_branches table' );
209
210
    $report->replace_library_limits( [ $library1->branchcode, $library2->branchcode ] );
211
212
    @branches_loop = $report->get_library_limits->as_list;
213
    is( scalar @branches_loop, 2, '1 branch removed from report_branches table' );
214
215
    $report->delete;
216
    is( Koha::Reports->search->count, $updated_nb_of_reports, 'Report deleted, count is back to original' );
217
    is(
218
        $schema->resultset('ReportsBranch')->search( { report_id => $id } )->count,
219
        0,
220
        'No branches left in reports_branches table after report deletion'
221
    );
222
};
223
188
$schema->storage->txn_rollback;
224
$schema->storage->txn_rollback;
189
- 

Return to bug 16631