From 2a254825a26b3a03e7ef7d0432f73765bb60ba3e Mon Sep 17 00:00:00 2001 From: "Cameron E. Tidd" Date: Sat, 26 Jul 2025 02:02:50 +0000 Subject: [PATCH 1/2] Bug 16631: [DO NOT PUSH] Add schema files for reports_branches and adjust saved_sql table MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch adds the reports_branches table to enforce library limits for reports, and adjusts the saved_sql table to point to reports_branches. Sponsored by: Ramapo Catskill Library System Test plan: Confirm Initial Settings 1. Log in to Koha staff with un: koha pw: koha and set your library as Centerville if it’s not already. 2. Visit the Saved reports. 3. Three (3) previously created reports should be visible. Verify Patch Settings 4. Apply the patch, then Restart services. 5. Go to the System Preferences page (Click the More dropdown from the top nav bar, click Administration, click System Preferences). 6. Verify Reports is an option in the left side navigation bar, and that when clicked, you see the EnableFilteringReports option. 7. Enable EnableFilteringReports as described in step 6. 8. Go back to Saved reports as in Step 2. 9. Click Edit in the row menu for Report 1. 10. At the bottom of the Report 1 edit page, you should see a Library limitation select box. Verify the Library Limitation Settings are Persisted 11. Choose Centerville from the select box and click Update SQL. 12. Reload the page, or navigate away from the page and go back to the edit screen for Report 1. 13. Verify that Centerville is still in the Library limitation select box. 14. Add Fairfield in the Library limitation select box and click Update and run SQL. 15. Go back to editing Report 1. 16. Confirm the Library limitation select box has both Centerville and Fairfield selected. 17. Duplicate Report 1. 18. Confirm the Library limitation select box has both Centerville and Fairfield selected. 19. Click Save Report. 20. Confirm the Library limitation select box has both Centerville and Fairfield selected. Verify Reports are Filtered Based on Library Limitations 21. Go to Saved reports as in Step 2. 22. Click Edit for Report 2. 23. Add Fairfield in the Library limitation select box as the only choice and click Update and run SQL. 24. Go to Saved reports as in Step 2. 25. Confirm you do not see Report 2, and only Report 1 and Report 3. 26. In the upper right corner, click the drop down that says koha Centerville and click Set library to change your library. 27. Set your library to Fairfield. 28. Go to Saved reports as in Step 2. 29. Confirm you do not see Report 1, and only Report 2 and Report 3. Verify Disabling EnableFilteringReports Preference Shows All Reports 30. Disable EnableFilteringReports preference as in steps 5 to 7. 31. Go to Saved reports as in Step 2. 32. Confirm Report 1, Report 2, Report 3 are visible. 33. Click to edit Report 1 and verify there is no Library limitation select box. Verify Library limitations are Persisted When EnableFilteringReports is Toggled On or Off 34. Enable EnableFilteringReports preference as in steps 5 to 7. 35. Ensure your library is set to Fairfield as in step 26. 36. Go to Saved reports as in Step 2. 37. Confirm Report 1 is not visible, and Report 2 and Report 3 are visible. 38. Click to edit Report 2 and verify the Library limitation select box is at the bottom of the page and that it has Fairfield selected. Verify the Show all reports option shows all reports for the superlibrarian user 39. On the Saved reports page, click the checkbox so the Show all reports option is checked and click the Apply button. 40. Confirm the page reloads with all reports visible: Report 1, Report 2, and Report 3 should be visible. 41. Click the checkbox so the Show all reports option is unchecked and click the Apply button. 42. Confirm Report 1 is not visible, and Report 2 and Report 3 are visible. Verify the Show all reports and Limit reports options are available to users that are not superlibrarian but have the Manage Report Filters permission 43. Log out of the koha admin account. In the upper right corner, click the drop down that says koha Fairfield and click Log out. 44. Log in as a previously created staff user with report permissions. At the login screen use username staffWithPermission and password Password1 45. Confirm the staff user’s library is Circleville in the upper right corner of the screen. 46. Go to Saved reports as in Step 2. 47. Confirm the checkbox for the Show all reports option is visible. 48. Click to edit Report 1. 49. Verify there is a Library limitation select box and that it can be edited. Verify the Show all reports and Limit reports options are not available to users that are not superlibrarian and do not have the Manage Report Filters permission 50. Log out of the koha admin account. In the upper right corner, click the drop down that says koha Circleville and click Log out. 51. Log in as a previously created staff user without report permissions. At the login screen use username staffNoPermission and password Password2 52. Confirm the staff user’s library is Fairfield in the upper right corner of the screen. 53. Go to Saved reports as in Step 2. 54. Confirm the checkbox for the Show all reports option is not visible. 55. Confirm Report 1 is not visible, and Report 2 and Report 3 are visible. 56. Click to edit Report 2. 57. Verify there is no Library limitation select box at the bottom of the page. Run Unit Tests 58. Using Koha Testing Docker, in the Koha home directory run the command: ktd --shell to start the ktd shell. 59. Run command: reset_all to drop and recreate the koha database. 60. Run command prove t/db_dependent/Koha/Reports.t to run the test. 61. The new unit tests for the reports_branches tables are in this file. 62. All tests should pass. 63. Run command prove t/Koha/Auth/Permissions.t 64. Permissions unit tests in this file were updated. 65. All tests should pass Signoff 66. Sign off if the steps above checkout. --- Koha/Schema/Result/ReportsBranch.pm | 86 ++++++++++++++ Koha/Schema/Result/SavedSql.pm | 220 ++++++++++++++++++++++++++++++++++++ 2 files changed, 306 insertions(+) create mode 100644 Koha/Schema/Result/ReportsBranch.pm diff --git a/Koha/Schema/Result/ReportsBranch.pm b/Koha/Schema/Result/ReportsBranch.pm new file mode 100644 index 0000000000..80472a5ff1 --- /dev/null +++ b/Koha/Schema/Result/ReportsBranch.pm @@ -0,0 +1,86 @@ +use utf8; + +package Koha::Schema::Result::ReportsBranch; + +# Created by DBIx::Class::Schema::Loader +# DO NOT MODIFY THE FIRST PART OF THIS FILE + +=head1 NAME + +Koha::Schema::Result::ItemtypesBranch + +=cut + +use strict; +use warnings; + +use base 'DBIx::Class::Core'; + +=head1 TABLE: C + +=cut + +__PACKAGE__->table("reports_branches"); + +=head1 ACCESSORS + +=head2 report_id + + data_type: 'varchar' + is_foreign_key: 1 + is_nullable: 1 + size: 80 + +=head2 branchcode + + data_type: 'varchar' + is_foreign_key: 1 + is_nullable: 0 + size: 10 + +=cut + +__PACKAGE__->add_columns( + "report_id", + { data_type => "varchar", is_foreign_key => 1, is_nullable => 1, size => 80 }, + "branchcode", + { data_type => "varchar", is_foreign_key => 1, is_nullable => 0, size => 10 }, +); + +=head1 RELATIONS + +=head2 branchcode + +Type: belongs_to + +Related object: L + +=cut + +__PACKAGE__->belongs_to( + "branchcode", + "Koha::Schema::Result::Branch", + { branchcode => "branchcode" }, + { is_deferrable => 1, on_delete => "CASCADE", on_update => "RESTRICT" }, +); + +=head2 itemtype + +Type: belongs_to + +Related object: L + +=cut + +__PACKAGE__->belongs_to( + "report_id", + "Koha::Schema::Result::Report", + { report_id => "report_id" }, + { is_deferrable => 1, on_delete => "CASCADE", on_update => "RESTRICT" }, +); + +# Created by DBIx::Class::Schema::Loader v0.07048 @ 2019-07-04 04:56:48 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:cBTswjKV8VWN1iueB+PygQ + +# You can replace this text with custom code or comments, and it will be preserved on regeneration +1; diff --git a/Koha/Schema/Result/SavedSql.pm b/Koha/Schema/Result/SavedSql.pm index 6f75ae3b31..88d54b52ef 100644 --- a/Koha/Schema/Result/SavedSql.pm +++ b/Koha/Schema/Result/SavedSql.pm @@ -185,6 +185,221 @@ __PACKAGE__->add_columns( __PACKAGE__->set_primary_key("id"); +=head1 RELATIONS + +=head2 reports_branches + +Type: has_many + +Related object: L + +=cut + +__PACKAGE__->has_many( + "reports_branches", + "Koha::Schema::Result::ReportsBranch", + { "foreign.report_id" => "self.id" }, + { cascade_copy => 0, cascade_delete => 0 }, +); + + +# Created by DBIx::Class::Schema::Loader v0.07051 @ 2025-07-26 01:58:59 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:w7XKvOV/ylS6Dq8tsUNmSg +# These lines were loaded from '/kohadevbox/koha/Koha/Schema/Result/SavedSql.pm' found in @INC. +# They are now part of the custom portion of this file +# for you to hand-edit. If you do not either delete +# this section or remove that file from @INC, this section +# will be repeated redundantly when you re-create this +# file again via Loader! See skip_load_external to disable +# this feature. + +use utf8; +package Koha::Schema::Result::SavedSql; + +# Created by DBIx::Class::Schema::Loader +# DO NOT MODIFY THE FIRST PART OF THIS FILE + +=head1 NAME + +Koha::Schema::Result::SavedSql + +=cut + +use strict; +use warnings; + +use base 'DBIx::Class::Core'; + +=head1 TABLE: C + +=cut + +__PACKAGE__->table("saved_sql"); + +=head1 ACCESSORS + +=head2 id + + data_type: 'integer' + is_auto_increment: 1 + is_nullable: 0 + +unique id and primary key assigned by Koha + +=head2 borrowernumber + + data_type: 'integer' + is_nullable: 1 + +the staff member who created this report (borrowers.borrowernumber) + +=head2 date_created + + data_type: 'datetime' + datetime_undef_if_invalid: 1 + is_nullable: 1 + +the date this report was created + +=head2 last_modified + + data_type: 'datetime' + datetime_undef_if_invalid: 1 + is_nullable: 1 + +the date this report was last edited + +=head2 savedsql + + data_type: 'mediumtext' + is_nullable: 1 + +the SQL for this report + +=head2 last_run + + data_type: 'datetime' + datetime_undef_if_invalid: 1 + is_nullable: 1 + +=head2 report_name + + data_type: 'varchar' + default_value: (empty string) + is_nullable: 0 + size: 255 + +the name of this report + +=head2 type + + data_type: 'varchar' + is_nullable: 1 + size: 255 + +always 1 for tabular + +=head2 notes + + data_type: 'mediumtext' + is_nullable: 1 + +the notes or description given to this report + +=head2 cache_expiry + + data_type: 'integer' + default_value: 300 + is_nullable: 0 + +=head2 public + + data_type: 'tinyint' + default_value: 0 + is_nullable: 0 + +=head2 report_area + + data_type: 'varchar' + is_nullable: 1 + size: 6 + +=head2 report_group + + data_type: 'varchar' + is_nullable: 1 + size: 80 + +=head2 report_subgroup + + data_type: 'varchar' + is_nullable: 1 + size: 80 + +=head2 mana_id + + data_type: 'integer' + is_nullable: 1 + +=cut + +__PACKAGE__->add_columns( + "id", + { data_type => "integer", is_auto_increment => 1, is_nullable => 0 }, + "borrowernumber", + { data_type => "integer", is_nullable => 1 }, + "date_created", + { + data_type => "datetime", + datetime_undef_if_invalid => 1, + is_nullable => 1, + }, + "last_modified", + { + data_type => "datetime", + datetime_undef_if_invalid => 1, + is_nullable => 1, + }, + "savedsql", + { data_type => "mediumtext", is_nullable => 1 }, + "last_run", + { + data_type => "datetime", + datetime_undef_if_invalid => 1, + is_nullable => 1, + }, + "report_name", + { data_type => "varchar", default_value => "", is_nullable => 0, size => 255 }, + "type", + { data_type => "varchar", is_nullable => 1, size => 255 }, + "notes", + { data_type => "mediumtext", is_nullable => 1 }, + "cache_expiry", + { data_type => "integer", default_value => 300, is_nullable => 0 }, + "public", + { data_type => "tinyint", default_value => 0, is_nullable => 0 }, + "report_area", + { data_type => "varchar", is_nullable => 1, size => 6 }, + "report_group", + { data_type => "varchar", is_nullable => 1, size => 80 }, + "report_subgroup", + { data_type => "varchar", is_nullable => 1, size => 80 }, + "mana_id", + { data_type => "integer", is_nullable => 1 }, +); + +=head1 PRIMARY KEY + +=over 4 + +=item * L + +=back + +=cut + +__PACKAGE__->set_primary_key("id"); + # Created by DBIx::Class::Schema::Loader v0.07049 @ 2021-01-21 13:39:29 # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:198dNG9DGQzop+s5IHy7sw @@ -214,3 +429,8 @@ sub koha_objects_class { } 1; +# End of lines loaded from '/kohadevbox/koha/Koha/Schema/Result/SavedSql.pm' + + +# You can replace this text with custom code or comments, and it will be preserved on regeneration +1; -- 2.15.0