Bug 40982: Allow to force visibility when needed

The _dt_visibility function is only called when the state is
initialized. Here we want to force the visibility of some columns even
if the state exists already.

The idea of this patch is to add a new 'force_visibility' flag to the
column when the visibility needs to be respected regardless what is in
the state. That should only be used when column cannot be toggled.

Signed-off-by: Slava Shishkin <slavashishkin@gmail.com>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 41b531b315)
Signed-off-by: Paul Derscheid <paul.derscheid@lmscloud.de>
This commit is contained in:
Jonathan Druart 2025-10-10 07:01:36 +02:00 committed by Paul Derscheid
parent 4cb9637be2
commit 7e95ca32da
No known key found for this signature in database
GPG Key ID: C25F9FD44CED595B
2 changed files with 54 additions and 9 deletions

View File

@ -1267,24 +1267,33 @@
<script>
$(document).ready(function() {
var table_settings = [% TablesSettings.GetTableSettings( 'acqui', 'basket', 'orders', 'json' ) | $raw %];
let supplier_report_column = table_settings.columns.find(c => c.columnname == 'supplier_report');
[% IF !(Koha.Preference('EDIFACT') && ediaccount) %]
table_settings.columns.find(c => c.columnname == 'supplier_report').is_hidden = 1;
table_settings.columns.find(c => c.columnname == 'supplier_report').cannot_be_toggled = 1;
supplier_report_column.is_hidden = 1;
supplier_report_column.cannot_be_toggled = 1;
[% ELSE %]
table_settings.columns.find(c => c.columnname == 'supplier_report').is_hidden = 0;
supplier_report_column.is_hidden = 0;
[% END %]
supplier_report_column.force_visibility = 1;
let modify_column = table_settings.columns.find(c => c.columnname == 'modify');
[% IF ( active && !closedate ) %]
table_settings.columns.find(c => c.columnname == 'modify').is_hidden = 0;
modify_column.is_hidden = 0;
[% ELSE %]
table_settings.columns.find(c => c.columnname == 'modify').is_hidden = 1;
table_settings.columns.find(c => c.columnname == 'modify').cannot_be_toggled = 1;
modify_column.is_hidden = 1;
modify_column.cannot_be_toggled = 1;
[% END %]
modify_column.force_visibility = 1;
let cancel_column = table_settings.columns.find(c => c.columnname == 'cancel');
[% IF !closedate || Koha.Preference('CancelOrdersInClosedBaskets') %]
table_settings.columns.find(c => c.columnname == 'cancel').is_hidden = 0;
cancel_column.is_hidden = 0;
[% ELSE %]
table_settings.columns.find(c => c.columnname == 'cancel').is_hidden = 1;
table_settings.columns.find(c => c.columnname == 'cancel').cannot_be_toggled = 1;
cancel_column.is_hidden = 1;
cancel_column.cannot_be_toggled = 1;
[% END %]
cancel_column.force_visibility = 1;
$("#orders").kohaTable({
bKohaColumnsUseNames: true,

View File

@ -950,6 +950,39 @@ function _dt_buttons(params) {
return buttons;
}
function _dt_force_visibility(table_settings, table_dt, state) {
var columns_settings = table_settings.columns;
let i = 0;
let use_names = $(table_dt.table().node()).data("bKohaColumnsUseNames");
if (use_names) {
let force_vis_columns = table_settings.columns.filter(
c => c.force_visibility
);
if (!force_vis_columns.length) return state;
table_dt
.columns(
force_vis_columns
.map(c => "[data-colname='%s']".format(c.columnname))
.join(",")
)
.every(function () {
state.columns[this.index()].visible =
table_settings.columns.find(
c =>
c.columnname ==
this.header().getAttribute("data-colname")
).is_hidden
? false
: true;
});
} else {
throw new Error(
"Cannot force column visibility without bKohaColumnsUseNames!"
);
}
return state;
}
function _dt_visibility(table_settings, table_dt) {
let hidden_ids = [];
if (table_settings) {
@ -1183,6 +1216,9 @@ function _dt_save_restore_state(table_settings, external_filter_nodes = {}) {
delete state.search;
state.columns.forEach(c => delete c.search);
}
state = _dt_force_visibility(table_settings, this.api(), state);
return state;
};