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

(-)a/C4/Reports/Guided.pm (+7 lines)
Lines 819-824 sub get_saved_reports_base_query { Link Here
819
SELECT s.*, $area_name_sql_snippet, av_g.lib AS groupname, av_sg.lib AS subgroupname,
819
SELECT s.*, $area_name_sql_snippet, av_g.lib AS groupname, av_sg.lib AS subgroupname,
820
b.firstname AS borrowerfirstname, b.surname AS borrowersurname
820
b.firstname AS borrowerfirstname, b.surname AS borrowersurname
821
FROM saved_sql s
821
FROM saved_sql s
822
INNER JOIN reports_branches rb ON s.id = rb.report_id
822
LEFT JOIN saved_reports r ON r.report_id = s.id
823
LEFT JOIN saved_reports r ON r.report_id = s.id
823
LEFT OUTER JOIN authorised_values av_g ON (av_g.category = 'REPORT_GROUP' AND av_g.authorised_value = s.report_group)
824
LEFT OUTER JOIN authorised_values av_g ON (av_g.category = 'REPORT_GROUP' AND av_g.authorised_value = s.report_group)
824
LEFT OUTER JOIN authorised_values av_sg ON (av_sg.category = 'REPORT_SUBGROUP' AND av_sg.lib_opac = s.report_group AND av_sg.authorised_value = s.report_subgroup)
825
LEFT OUTER JOIN authorised_values av_sg ON (av_sg.category = 'REPORT_SUBGROUP' AND av_sg.lib_opac = s.report_group AND av_sg.authorised_value = s.report_subgroup)
Lines 873-884 sub get_saved_reports { Link Here
873
            push @cond, "report_subgroup = ?";
874
            push @cond, "report_subgroup = ?";
874
            push @args, $filter->{subgroup};
875
            push @args, $filter->{subgroup};
875
        }
876
        }
877
        if ( $filter->{branchcode} ) {
878
            push @cond, "rb.branchcode = ?";
879
            push @args, $filter->{branchcode};
880
        }
876
    }
881
    }
877
    $query .= " WHERE " . join( " AND ", map "($_)", @cond ) if @cond;
882
    $query .= " WHERE " . join( " AND ", map "($_)", @cond ) if @cond;
878
    $query .=
883
    $query .=
879
        " GROUP BY s.id, s.borrowernumber, s.date_created, s.last_modified, s.savedsql, s.last_run, s.report_name, s.type, s.notes, s.cache_expiry, s.public, s.report_area, s.report_group, s.report_subgroup, s.mana_id, av_g.lib, av_sg.lib, b.firstname, b.surname";
884
        " GROUP BY s.id, s.borrowernumber, s.date_created, s.last_modified, s.savedsql, s.last_run, s.report_name, s.type, s.notes, s.cache_expiry, s.public, s.report_area, s.report_group, s.report_subgroup, s.mana_id, av_g.lib, av_sg.lib, b.firstname, b.surname";
880
    $query .= " ORDER by date_created";
885
    $query .= " ORDER by date_created";
881
886
887
    say STDERR $query;
888
882
    my $result = $dbh->selectall_arrayref( $query, { Slice => {} }, @args );
889
    my $result = $dbh->selectall_arrayref( $query, { Slice => {} }, @args );
883
890
884
    return $result;
891
    return $result;
(-)a/Koha.pm (+1 lines)
Lines 29-34 use vars qw{ $VERSION }; Link Here
29
# - #4 : the developer version. The 4th number is the database subversion.
29
# - #4 : the developer version. The 4th number is the database subversion.
30
#        used by developers when the database changes. updatedatabase take care of the changes itself
30
#        used by developers when the database changes. updatedatabase take care of the changes itself
31
#        and is automatically called by Auth.pm when needed.
31
#        and is automatically called by Auth.pm when needed.
32
32
$VERSION = "25.06.00.007";
33
$VERSION = "25.06.00.007";
33
34
34
sub version {
35
sub version {
(-)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/Koha/Schema/Result/ReportsBranch.pm (+86 lines)
Line 0 Link Here
1
use utf8;
2
3
package Koha::Schema::Result::ReportsBranch;
4
5
# Created by DBIx::Class::Schema::Loader
6
# DO NOT MODIFY THE FIRST PART OF THIS FILE
7
8
=head1 NAME
9
10
Koha::Schema::Result::ItemtypesBranch
11
12
=cut
13
14
use strict;
15
use warnings;
16
17
use base 'DBIx::Class::Core';
18
19
=head1 TABLE: C<itemtypes_branches>
20
21
=cut
22
23
__PACKAGE__->table("reports_branches");
24
25
=head1 ACCESSORS
26
27
=head2 report_id
28
29
  data_type: 'varchar'
30
  is_foreign_key: 1
31
  is_nullable: 1
32
  size: 80
33
34
=head2 branchcode
35
36
  data_type: 'varchar'
37
  is_foreign_key: 1
38
  is_nullable: 0
39
  size: 10
40
41
=cut
42
43
__PACKAGE__->add_columns(
44
    "report_id",
45
    { data_type => "varchar", is_foreign_key => 1, is_nullable => 1, size => 80 },
46
    "branchcode",
47
    { data_type => "varchar", is_foreign_key => 1, is_nullable => 0, size => 10 },
48
);
49
50
=head1 RELATIONS
51
52
=head2 branchcode
53
54
Type: belongs_to
55
56
Related object: L<Koha::Schema::Result::Branch>
57
58
=cut
59
60
__PACKAGE__->belongs_to(
61
    "branchcode",
62
    "Koha::Schema::Result::Branch",
63
    { branchcode    => "branchcode" },
64
    { is_deferrable => 1, on_delete => "CASCADE", on_update => "RESTRICT" },
65
);
66
67
=head2 itemtype
68
69
Type: belongs_to
70
71
Related object: L<Koha::Schema::Result::Itemtype>
72
73
=cut
74
75
__PACKAGE__->belongs_to(
76
    "report_id",
77
    "Koha::Schema::Result::Report",
78
    { report_id     => "report_id" },
79
    { is_deferrable => 1, on_delete => "CASCADE", on_update => "RESTRICT" },
80
);
81
82
# Created by DBIx::Class::Schema::Loader v0.07048 @ 2019-07-04 04:56:48
83
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:cBTswjKV8VWN1iueB+PygQ
84
85
# You can replace this text with custom code or comments, and it will be preserved on regeneration
86
1;
(-)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/updatedatabase.pl (+16 lines)
Lines 29455-29460 if ( CheckVersion($DBversion) ) { Link Here
29455
    NewVersion( $DBversion, 28108, "Add new systempreference OpacHiddenItemsHidesRecord" );
29455
    NewVersion( $DBversion, 28108, "Add new systempreference OpacHiddenItemsHidesRecord" );
29456
}
29456
}
29457
29457
29458
$DBversion = '25.06.00.003';
29459
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
29460
    $dbh->do(
29461
        "CREATE TABLE `reports_branches` (
29462
            `report_id` int(11) NOT NULL,
29463
            `branchcode` varchar(10) NOT NULL,
29464
            KEY `report_id` (`report_id`),
29465
            KEY `branchcode` (`branchcode`),
29466
            CONSTRAINT `reports_branches_ibfk_1` FOREIGN KEY (`report_id`) REFERENCES `saved_sql` (`id`) ON DELETE CASCADE,
29467
            CONSTRAINT `reports_branches_ibfk_2` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE
29468
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;"
29469
    );
29470
    print "Upgrade to $DBversion done (reports_branches added)\n";
29471
    SetVersion($DBversion);
29472
}
29473
29458
$DBversion = '21.05.00.000';
29474
$DBversion = '21.05.00.000';
29459
if ( CheckVersion($DBversion) ) {
29475
if ( CheckVersion($DBversion) ) {
29460
    NewVersion( $DBversion, "", "Koha 21.05.00 release" );
29476
    NewVersion( $DBversion, "", "Koha 21.05.00 release" );
(-)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 (+9 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."
9
         - "<br><strong>NOTE:</strong> A NOTE ABOUT THE EFFECTS OF THIS PREFERENCE / SETTING"
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt (-2 / +26 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 850-855 Link Here
850
                            <input type="hidden" name="reportname" value="[% reportname | html %]" />
851
                            <input type="hidden" name="reportname" value="[% reportname | html %]" />
851
                            <input type="hidden" name="group" value="[% group | html %]" />
852
                            <input type="hidden" name="group" value="[% group | html %]" />
852
                            <input type="hidden" name="subgroup" value="[% subgroup | html %]" />
853
                            <input type="hidden" name="subgroup" value="[% subgroup | html %]" />
854
                            <input type="hidden" name="branches" value="[% branches | html %] />
853
                            <input type="hidden" name="notes" value="[% notes | scrub_html type => 'note' | $raw %]" />
855
                            <input type="hidden" name="notes" value="[% notes | scrub_html type => 'note' | $raw %]" />
854
                            <input type="hidden" name="cache_expiry" value="[% cache_expiry | html %]" />
856
                            <input type="hidden" name="cache_expiry" value="[% cache_expiry | html %]" />
855
                            <input type="hidden" name="cache_expiry_units" value="[% cache_expiry_units | html %]" />
857
                            <input type="hidden" name="cache_expiry_units" value="[% cache_expiry_units | html %]" />
Lines 1434-1440 Link Here
1434
                                <span class="required">Required</span>
1436
                                <span class="required">Required</span>
1435
                            </div>
1437
                            </div>
1436
                        </fieldset>
1438
                        </fieldset>
1437
1439
                        [% IF ( Koha.Preference('EnableFilteringReports') ) %]
1440
                            <fieldset class="rows">
1441
                                <legend>Library limitation:</legend>
1442
                                <div
1443
                                ><label for="library_limitation">Library limitation: </label>
1444
                                   <select id="library_limitation" name="branches" multiple size="10">
1445
                                        [% PROCESS options_for_libraries libraries => Branches.all( selected => report.get_library_limits, unfiltered => 1, do_not_select_my_library => 1 ) %]
1446
                                    </select>
1447
                                    <div class="hint">Limits the use of this report to the selected libraries.</div>
1448
                                </div>
1449
                            </fieldset>
1450
                        [% END %]       
1438
                        <fieldset class="action">
1451
                        <fieldset class="action">
1439
                            <input type="hidden" name="op" value="cud-save" />
1452
                            <input type="hidden" name="op" value="cud-save" />
1440
                            <input type="submit" name="submit" class="btn btn-primary" value="Save report" />
1453
                            <input type="submit" name="submit" class="btn btn-primary" value="Save report" />
Lines 1548-1554 Link Here
1548
                            <br />
1561
                            <br />
1549
                            <span class="required" style="margin-left:30px;">Required</span>
1562
                            <span class="required" style="margin-left:30px;">Required</span>
1550
                        </fieldset>
1563
                        </fieldset>
1551
1564
                        [% IF ( Koha.Preference('EnableFilteringReports') ) %]
1565
                            <fieldset class="rows">
1566
                                <legend>Library limitation:</legend>
1567
                                <div
1568
                                ><label for="library_limitation">Library limitation: </label>
1569
                                   <select id="library_limitation" name="branches" multiple size="10">
1570
                                        [% PROCESS options_for_libraries libraries => Branches.all( selected => report.get_library_limits, unfiltered => 1, do_not_select_my_library => 1 ) %]
1571
                                    </select>
1572
                                    <div class="hint">Limits the use of this report to the selected libraries.</div>
1573
                                </div>
1574
                            </fieldset>
1575
                        [% END %]                        
1552
                        <fieldset class="action">
1576
                        <fieldset class="action">
1553
                            <button class="btn btn-primary" type="submit" name="op" value="cud-update_sql">Update SQL</button>
1577
                            <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>
1578
                            <button class="btn btn-default" type="submit" name="op" value="cud-update_and_run_sql">Update and run SQL</button>
(-)a/misc/devel/Koha/Schema/Result/ReportsBranch.pm (+85 lines)
Line 0 Link Here
1
use utf8;
2
3
package Koha::Schema::Result::ReportsBranch;
4
5
# Created by DBIx::Class::Schema::Loader
6
# DO NOT MODIFY THE FIRST PART OF THIS FILE
7
8
=head1 NAME
9
10
Koha::Schema::Result::ReportsBranch
11
12
=cut
13
14
use strict;
15
use warnings;
16
17
use base 'DBIx::Class::Core';
18
19
=head1 TABLE: C<reports_branches>
20
21
=cut
22
23
__PACKAGE__->table("reports_branches");
24
25
=head1 ACCESSORS
26
27
=head2 report_id
28
29
  data_type: 'integer'
30
  is_foreign_key: 1
31
  is_nullable: 0
32
33
=head2 branchcode
34
35
  data_type: 'varchar'
36
  is_foreign_key: 1
37
  is_nullable: 0
38
  size: 10
39
40
=cut
41
42
__PACKAGE__->add_columns(
43
    "report_id",
44
    { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
45
    "branchcode",
46
    { data_type => "varchar", is_foreign_key => 1, is_nullable => 0, size => 10 },
47
);
48
49
=head1 RELATIONS
50
51
=head2 branchcode
52
53
Type: belongs_to
54
55
Related object: L<Koha::Schema::Result::Branch>
56
57
=cut
58
59
__PACKAGE__->belongs_to(
60
    "branchcode",
61
    "Koha::Schema::Result::Branch",
62
    { branchcode    => "branchcode" },
63
    { is_deferrable => 1, on_delete => "CASCADE", on_update => "RESTRICT" },
64
);
65
66
=head2 report
67
68
Type: belongs_to
69
70
Related object: L<Koha::Schema::Result::SavedSql>
71
72
=cut
73
74
__PACKAGE__->belongs_to(
75
    "report",
76
    "Koha::Schema::Result::SavedSql",
77
    { id            => "report_id" },
78
    { is_deferrable => 1, on_delete => "CASCADE", on_update => "RESTRICT" },
79
);
80
81
# Created by DBIx::Class::Schema::Loader v0.07051 @ 2025-07-06 17:02:11
82
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:SJqUxMgLJHAjbX3GJlpB+A
83
84
# You can replace this text with custom code or comments, and it will be preserved on regeneration
85
1;
(-)a/reports/guided_reports.pl (-10 / +31 lines)
Lines 57-62 my $input = CGI->new; Link Here
57
my $usecache = Koha::Caches->get_instance->memcached_cache;
57
my $usecache = Koha::Caches->get_instance->memcached_cache;
58
58
59
my $op = $input->param('op') // '';
59
my $op = $input->param('op') // '';
60
60
my $flagsrequired;
61
my $flagsrequired;
61
if (   ( $op eq 'add_form' )
62
if (   ( $op eq 'add_form' )
62
    || ( $op eq 'add_form_sql' )
63
    || ( $op eq 'add_form_sql' )
Lines 127-133 if ( !$op ) { Link Here
127
        'showsql'       => 1,
128
        'showsql'       => 1,
128
        'mana_success'  => scalar $input->param('mana_success'),
129
        'mana_success'  => scalar $input->param('mana_success'),
129
        'mana_id'       => $report->{mana_id},
130
        'mana_id'       => $report->{mana_id},
130
        'mana_comments' => $report->{comments}
131
        'mana_comments' => $report->{comments},
131
    );
132
    );
132
133
133
} elsif ( $op eq 'edit_form' ) {
134
} elsif ( $op eq 'edit_form' ) {
Lines 136-141 if ( !$op ) { Link Here
136
    my $group    = $report->report_group;
137
    my $group    = $report->report_group;
137
    my $subgroup = $report->report_subgroup;
138
    my $subgroup = $report->report_subgroup;
138
    my $tables   = get_tables();
139
    my $tables   = get_tables();
140
139
    $template->param(
141
    $template->param(
140
        'sql'                   => $report->savedsql,
142
        'sql'                   => $report->savedsql,
141
        'reportname'            => $report->report_name,
143
        'reportname'            => $report->report_name,
Lines 148-158 if ( !$op ) { Link Here
148
        'editsql'               => 1,
150
        'editsql'               => 1,
149
        'mana_id'               => $report->{mana_id},
151
        'mana_id'               => $report->{mana_id},
150
        'mana_comments'         => $report->{comments},
152
        'mana_comments'         => $report->{comments},
151
        'tables'                => $tables
153
        'tables'                => $tables,
154
        'report'                => $report,
152
    );
155
    );
153
156
154
} elsif ( $op eq 'cud-update_sql' || $op eq 'cud-update_and_run_sql' ) {
157
} elsif ( $op eq 'cud-update_sql' || $op eq 'cud-update_and_run_sql' ) {
155
    my $id                 = $input->param('id');
158
    my $id                 = $input->param('id');
159
    my $report             = Koha::Reports->find($id);
156
    my $sql                = $input->param('sql');
160
    my $sql                = $input->param('sql');
157
    my $reportname         = $input->param('reportname');
161
    my $reportname         = $input->param('reportname');
158
    my $group              = $input->param('group');
162
    my $group              = $input->param('group');
Lines 162-171 if ( !$op ) { Link Here
162
    my $cache_expiry_units = $input->param('cache_expiry_units');
166
    my $cache_expiry_units = $input->param('cache_expiry_units');
163
    my $public             = $input->param('public');
167
    my $public             = $input->param('public');
164
    my $save_anyway        = $input->param('save_anyway');
168
    my $save_anyway        = $input->param('save_anyway');
169
    my $tables             = get_tables();
170
    my @branches           = grep { $_ ne q{} } $input->multi_param('branches');
165
    my @errors;
171
    my @errors;
166
    my $tables = get_tables();
167
172
168
    # 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) {
173
    if ($cache_expiry_units) {
170
        if ( $cache_expiry_units eq "minutes" ) {
174
        if ( $cache_expiry_units eq "minutes" ) {
171
            $cache_expiry *= 60;
175
            $cache_expiry *= 60;
Lines 211-216 if ( !$op ) { Link Here
211
                'problematic_authvals' => $problematic_authvals,
215
                'problematic_authvals' => $problematic_authvals,
212
                'warn_authval_problem' => 1,
216
                'warn_authval_problem' => 1,
213
                'phase_update'         => 1,
217
                'phase_update'         => 1,
218
                'branches'             => @branches,
219
                'report'               => $report,
214
            );
220
            );
215
221
216
        } else {
222
        } else {
Lines 229-234 if ( !$op ) { Link Here
229
                }
235
                }
230
            );
236
            );
231
237
238
            $report->store;
239
            $report->replace_library_limits( \@branches );
240
232
            my $editsql = 1;
241
            my $editsql = 1;
233
            if ( $op eq 'cud-update_and_run_sql' ) {
242
            if ( $op eq 'cud-update_and_run_sql' ) {
234
                $editsql = 0;
243
                $editsql = 0;
Lines 245-251 if ( !$op ) { Link Here
245
                'cache_expiry'          => $cache_expiry,
254
                'cache_expiry'          => $cache_expiry,
246
                'public'                => $public,
255
                'public'                => $public,
247
                'usecache'              => $usecache,
256
                'usecache'              => $usecache,
248
                'tables'                => $tables
257
                'tables'                => $tables,
258
                'report'                => $report,
249
            );
259
            );
250
            logaction( "REPORTS", "MODIFY", $id, "$reportname | $sql" ) if C4::Context->preference("ReportsLog");
260
            logaction( "REPORTS", "MODIFY", $id, "$reportname | $sql" ) if C4::Context->preference("ReportsLog");
251
        }
261
        }
Lines 514-519 if ( !$op ) { Link Here
514
    my $public             = $input->param('public');
524
    my $public             = $input->param('public');
515
    my $save_anyway        = $input->param('save_anyway');
525
    my $save_anyway        = $input->param('save_anyway');
516
    my $tables             = get_tables();
526
    my $tables             = get_tables();
527
    my @branches           = grep { $_ ne q{} } $input->multi_param('branches');
517
528
518
    # if we have the units, then we came from creating a report from SQL and thus need to handle converting units
529
    # 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) {
530
    if ($cache_expiry_units) {
Lines 591-596 if ( !$op ) { Link Here
591
                    public         => $public,
602
                    public         => $public,
592
                }
603
                }
593
            );
604
            );
605
            my $report = Koha::Reports->find($id);
606
            $report->replace_library_limits( \@branches );
607
594
            logaction( "REPORTS", "ADD", $id, "$name | $sql" ) if C4::Context->preference("ReportsLog");
608
            logaction( "REPORTS", "ADD", $id, "$name | $sql" ) if C4::Context->preference("ReportsLog");
595
            $template->param(
609
            $template->param(
596
                'save_successful'       => 1,
610
                'save_successful'       => 1,
Lines 603-609 if ( !$op ) { Link Here
603
                'cache_expiry'          => $cache_expiry,
617
                'cache_expiry'          => $cache_expiry,
604
                'public'                => $public,
618
                'public'                => $public,
605
                'usecache'              => $usecache,
619
                'usecache'              => $usecache,
606
                'tables'                => $tables
620
                'tables'                => $tables,
621
                'report'                => $report,
607
            );
622
            );
608
        }
623
        }
609
    }
624
    }
Lines 746-765 if ( !$op ) { Link Here
746
761
747
} elsif ( $op eq 'add_form_sql' || $op eq 'duplicate' ) {
762
} elsif ( $op eq 'add_form_sql' || $op eq 'duplicate' ) {
748
763
749
    my ( $group, $subgroup, $sql, $reportname, $notes );
764
    my ( $group, $subgroup, $sql, $reportname, $notes, @branches, $report );
750
    if ( $input->param('sql') ) {
765
    if ( $input->param('sql') ) {
751
        $group      = $input->param('report_group');
766
        $group      = $input->param('report_group');
752
        $subgroup   = $input->param('report_subgroup');
767
        $subgroup   = $input->param('report_subgroup');
753
        $sql        = $input->param('sql')        // '';
768
        $sql        = $input->param('sql')        // '';
754
        $reportname = $input->param('reportname') // '';
769
        $reportname = $input->param('reportname') // '';
755
        $notes      = $input->param('notes')      // '';
770
        $notes      = $input->param('notes')      // '';
771
        @branches   = grep { $_ ne q{} } $input->multi_param('branches');
756
    } elsif ( my $report_id = $input->param('id') ) {
772
    } elsif ( my $report_id = $input->param('id') ) {
757
        my $report = Koha::Reports->find($report_id);
773
        $report     = Koha::Reports->find($report_id);
758
        $group      = $report->report_group;
774
        $group      = $report->report_group;
759
        $subgroup   = $report->report_subgroup;
775
        $subgroup   = $report->report_subgroup;
760
        $sql        = $report->savedsql    // '';
776
        $sql        = $report->savedsql    // '';
761
        $reportname = $report->report_name // '';
777
        $reportname = $report->report_name // '';
762
        $notes      = $report->notes       // '';
778
        $notes      = $report->notes       // '';
779
        @branches   = grep { $_ ne q{} } $input->multi_param('branches');
780
763
    }
781
    }
764
782
765
    my $tables = get_tables();
783
    my $tables = get_tables();
Lines 774-779 if ( !$op ) { Link Here
774
        'cache_expiry'          => 300,
792
        'cache_expiry'          => 300,
775
        'usecache'              => $usecache,
793
        'usecache'              => $usecache,
776
        'tables'                => $tables,
794
        'tables'                => $tables,
795
        'report'                => $report,
777
796
778
    );
797
    );
779
}
798
}
Lines 1079-1088 if ( $op eq 'list' || $op eq 'convert' ) { Link Here
1079
    # get list of reports and display them
1098
    # get list of reports and display them
1080
    my $group    = $input->param('group');
1099
    my $group    = $input->param('group');
1081
    my $subgroup = $input->param('subgroup');
1100
    my $subgroup = $input->param('subgroup');
1082
    $filter->{group}    = $group;
1101
    $filter->{group}      = $group;
1083
    $filter->{subgroup} = $subgroup;
1102
    $filter->{subgroup}   = $subgroup;
1103
    $filter->{branchcode} = C4::Context::mybranch();
1084
    my $reports = get_saved_reports($filter);
1104
    my $reports = get_saved_reports($filter);
1085
    my $has_obsolete_reports;
1105
    my $has_obsolete_reports;
1106
1086
    for my $report (@$reports) {
1107
    for my $report (@$reports) {
1087
        $report->{results} = C4::Reports::Guided::get_results( $report->{id} );
1108
        $report->{results} = C4::Reports::Guided::get_results( $report->{id} );
1088
        if ( $report->{savedsql} =~ m|biblioitems| and $report->{savedsql} =~ m|marcxml| ) {
1109
        if ( $report->{savedsql} =~ m|biblioitems| and $report->{savedsql} =~ m|marcxml| ) {
(-)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