Bug 35714: Prevent items not linked with processing with a letter code a to be printed

Items linked with a processing which does not have a letter code are not
supposed to be printed.
Currently the code is allowing to "print slip" for items when using the
link on top of the table. It results in an error "No letter_code at
/kohadevbox/koha/preservation/print_slip.pl line 45."

Test plan:
Create a processing without a letter code
Add 2 items to the waiting list then add them to a train
Go to the "show train" view
=> notice that you cannot print slip for those items
Create another processing with a letter code
Edit one of the item and set it the new processing
=> A slip for this item can be printed
Edit the other item and the train to make them use the new processing
=> A slip for those items can be printed

Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
(cherry picked from commit 335b5b7ad5)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
This commit is contained in:
Jonathan Druart 2024-01-09 16:47:56 +01:00 committed by Fridolin Somers
parent 204b5c76ce
commit 29aa0eab32

View file

@ -183,10 +183,18 @@
v-bind:key="counter"
>
<input
:disabled="!item.processing.letter_code"
v-model="selected_items"
type="checkbox"
name="user_train_item_id"
:value="item.train_item_id"
:title="
!item.processing.letter_code
? $__(
'Cannot print slip, this item does not have a processing with a letter template defined.'
)
: ''
"
/>
<label
>{{ item.user_train_item_id }}
@ -527,15 +535,17 @@ export default {
selectAll() {
if (this.item_table.display) {
$("#" + this.table_id)
.find("input[name='user_train_item_id'][type='checkbox']")
.find(
"input[name='user_train_item_id'][type='checkbox']:not(:disabled)"
)
.each((i, input) => {
this.selected_items.push($(input).val())
$(input).prop("checked", true)
})
} else {
this.selected_items = this.train.items.map(
item => item.train_item_id
)
this.selected_items = this.train.items
.filter(i => i.processing.letter_code)
.map(item => item.train_item_id)
}
},
printSelected() {
@ -579,6 +589,12 @@ export default {
let train_item_id = train_item.train_item_id
let checkbox = createVNode("input", {
...(!train_item.processing.letter_code && {
disabled: "disabled",
title: __(
"Cannot print slip, this item does not have a processing with a letter template defined."
),
}),
type: "checkbox",
name: "user_train_item_id",
value: train_item_id,
@ -660,7 +676,7 @@ export default {
)
}
if (train_item.processing.letter_code !== null) {
if (train_item.processing.letter_code) {
let printButton = createVNode(
"a",
{