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

(-)a/installer/data/mysql/atomicupdate/bug_10190.pl (-8 / +82 lines)
Lines 8-13 return { Link Here
8
        my ($args) = @_;
8
        my ($args) = @_;
9
        my ( $dbh, $out ) = @$args{qw(dbh out)};
9
        my ( $dbh, $out ) = @$args{qw(dbh out)};
10
10
11
        # This script first pulls data from these tables, then deletes them. -> Do not run if they do not exist.
12
        if ( !TableExists('overduerules_transport_types') || !TableExists('overduerules') ) {
13
            exit;
14
        }
15
11
        # Populate empty overduerules table for missing categories
16
        # Populate empty overduerules table for missing categories
12
        $dbh->do(
17
        $dbh->do(
13
            q|
18
            q|
Lines 150-161 return { Link Here
150
            my $branchcode_key = $branchcode // '';
155
            my $branchcode_key = $branchcode // '';
151
            foreach my $i ( 1 .. 3 ) {
156
            foreach my $i ( 1 .. 3 ) {
152
157
158
                my $has_rules = 0;
159
153
                # Insert the delay rule for group $i, skipping if it matches the most frequent delay
160
                # Insert the delay rule for group $i, skipping if it matches the most frequent delay
154
                if ( my $delay = $rule->{"delay$i"} ) {
161
                if ( my $delay = $rule->{"delay$i"} ) {
155
                    $delay ||= '';
162
                    $delay ||= '';
156
                    unless ( $delay eq $most_frequent_delay{$branchcode_key}{$i} ) {
163
                    unless ( $delay eq $most_frequent_delay{$branchcode_key}{$i} ) {
157
                        $delay ||= undef;
164
                        $delay ||= undef;
158
                        say $out "Inserting $branchcode:$categorycode:$itemtype overdue_$i" . '_delay: ' . $delay;
165
                        say $out "Inserting "
166
                            . ( $branchcode   // '' ) . ":"
167
                            . ( $categorycode // '' ) . ':'
168
                            . ( $itemtype     // '' )
169
                            . " overdue_$i"
170
                            . '_delay: '
171
                            . ( $delay // '' );
159
                        $insert->execute(
172
                        $insert->execute(
160
                            $branchcode,
173
                            $branchcode,
161
                            $categorycode,
174
                            $categorycode,
Lines 163-175 return { Link Here
163
                            "overdue_$i" . '_delay',
176
                            "overdue_$i" . '_delay',
164
                            $delay
177
                            $delay
165
                        );
178
                        );
179
                        $has_rules = 1;
166
                    }
180
                    }
167
                }
181
                }
168
182
169
                # Insert the notice rule for group $i, skipping if it matches the most frequent notice
183
                # Insert the notice rule for group $i, skipping if it matches the most frequent notice
170
                if ( my $notice = $rule->{"letter$i"} ) {
184
                if ( my $notice = $rule->{"letter$i"} ) {
171
                    unless ( $notice eq $most_frequent_notice{$branchcode_key}{$i} ) {
185
                    unless ( $notice eq $most_frequent_notice{$branchcode_key}{$i} ) {
172
                        say $out "Inserting $branchcode:$categorycode:$itemtype overdue_$i" . '_notice: ' . $notice;
186
                        say $out "Inserting "
187
                            . ( $branchcode   // '' ) . ":"
188
                            . ( $categorycode // '' ) . ':'
189
                            . ( $itemtype     // '' )
190
                            . " overdue_$i"
191
                            . '_notice: '
192
                            . ( $notice // '' );
173
                        $insert->execute(
193
                        $insert->execute(
174
                            $branchcode,
194
                            $branchcode,
175
                            $categorycode,
195
                            $categorycode,
Lines 177-189 return { Link Here
177
                            "overdue_$i" . '_notice',
197
                            "overdue_$i" . '_notice',
178
                            $notice
198
                            $notice
179
                        );
199
                        );
200
                        $has_rules = 1;
180
                    }
201
                    }
181
                }
202
                }
182
203
183
                # Insert the message transport type rule for group $i, skipping if it matches the most frequent mtt
204
                # Insert the message transport type rule for group $i, skipping if it matches the most frequent mtt
184
                if ( my $mtt = $rule->{"message_transport_type_$i"} ) {
205
                if ( my $mtt = $rule->{"message_transport_type_$i"} ) {
185
                    unless ( $mtt eq $most_frequent_mtt{$branchcode_key}{$i} ) {
206
                    unless ( $mtt eq $most_frequent_mtt{$branchcode_key}{$i} ) {
186
                        say $out "Inserting $branchcode:$categorycode:$itemtype overdue_$i" . '_mtt: ' . $mtt;
207
                        say $out "Inserting "
208
                            . ( $branchcode   // '' ) . ":"
209
                            . ( $categorycode // '' ) . ':'
210
                            . ( $itemtype     // '' )
211
                            . " overdue_$i"
212
                            . '_mtt: '
213
                            . ( $mtt // '' );
187
                        $insert->execute(
214
                        $insert->execute(
188
                            $branchcode,
215
                            $branchcode,
189
                            $categorycode,
216
                            $categorycode,
Lines 191-203 return { Link Here
191
                            "overdue_$i" . '_mtt',
218
                            "overdue_$i" . '_mtt',
192
                            $mtt
219
                            $mtt
193
                        );
220
                        );
221
                        $has_rules = 1;
194
                    }
222
                    }
195
                }
223
                }
196
224
197
                # Insert the restrict rule for group $i
225
                # Insert the restrict rule for group $i
198
                if ( my $restrict = $rule->{"debarred$i"} ) {
226
                if ( my $restrict = $rule->{"debarred$i"} ) {
199
                    unless ( $restrict eq $most_frequent_restrict{$branchcode_key}{$i} ) {
227
                    unless ( $restrict eq $most_frequent_restrict{$branchcode_key}{$i} ) {
200
                        say $out "Inserting $branchcode:$categorycode:$itemtype overdue_$i" . '_restrict: ' . $restrict;
228
                        say $out "Inserting "
229
                            . ( $branchcode   // '' ) . ":"
230
                            . ( $categorycode // '' ) . ':'
231
                            . ( $itemtype     // '' )
232
                            . " overdue_$i"
233
                            . '_restrict: '
234
                            . ( $restrict // '' );
201
                        $insert->execute(
235
                        $insert->execute(
202
                            $branchcode,
236
                            $branchcode,
203
                            $categorycode,
237
                            $categorycode,
Lines 205-212 return { Link Here
205
                            "overdue_$i" . '_restrict',
239
                            "overdue_$i" . '_restrict',
206
                            $restrict
240
                            $restrict
207
                        );
241
                        );
242
                        $has_rules = 1;
208
                    }
243
                    }
209
                }
244
                }
245
246
                # Insert the has_rules rule for group $i if and only if a rule set has been added into the db for this context.
247
                if ( $has_rules == 1 ) {
248
                    say $out "Inserting "
249
                        . ( $branchcode   // '' ) . ":"
250
                        . ( $categorycode // '' ) . ':'
251
                        . ( $itemtype     // '' )
252
                        . " overdue_$i"
253
                        . "has_rules: 1";
254
                    $insert->execute(
255
                        $branchcode,
256
                        $categorycode,
257
                        $itemtype,
258
                        "overdue_$i" . '_has_rules',
259
                        1
260
                    );
261
                }
210
            }
262
            }
211
        }
263
        }
212
264
Lines 215-221 return { Link Here
215
            my $branchcode_value = $branchcode || undef;
267
            my $branchcode_value = $branchcode || undef;
216
            foreach my $i ( 1 .. 3 ) {
268
            foreach my $i ( 1 .. 3 ) {
217
                my $most_frequent_delay = $most_frequent_delay{$branchcode}{$i};
269
                my $most_frequent_delay = $most_frequent_delay{$branchcode}{$i};
218
                say $out "Inserting $branchcode_value:undef:$itemtype default most frequent delay for overdue_$i: "
270
                say $out "Inserting "
271
                    . ( $branchcode_value // '' )
272
                    . ":undef:"
273
                    . ( $itemtype // '' )
274
                    . " default most frequent delay for overdue_$i: "
219
                    . $most_frequent_delay;
275
                    . $most_frequent_delay;
220
                $insert->execute(
276
                $insert->execute(
221
                    $branchcode_value,
277
                    $branchcode_value,
Lines 226-232 return { Link Here
226
                );
282
                );
227
283
228
                my $most_frequent_notice = $most_frequent_notice{$branchcode}{$i};
284
                my $most_frequent_notice = $most_frequent_notice{$branchcode}{$i};
229
                say $out "Inserting $branchcode_value:undef:undef default most frequent notice for overdue_$i: "
285
                say $out "Inserting "
286
                    . ( $branchcode_value // '' )
287
                    . ":undef:undef default most frequent notice for overdue_$i: "
230
                    . $most_frequent_notice;
288
                    . $most_frequent_notice;
231
                $insert->execute(
289
                $insert->execute(
232
                    $branchcode_value,
290
                    $branchcode_value,
Lines 237-243 return { Link Here
237
                );
295
                );
238
296
239
                my $most_frequent_mtt = $most_frequent_mtt{$branchcode}{$i};
297
                my $most_frequent_mtt = $most_frequent_mtt{$branchcode}{$i};
240
                say $out "Inserting $branchcode_value:undef:undef default most frequent mtt for overdue_$i: "
298
                say $out "Inserting "
299
                    . ( $branchcode_value // '' )
300
                    . ":undef:undef default most frequent mtt for overdue_$i: "
241
                    . $most_frequent_mtt;
301
                    . $most_frequent_mtt;
242
                $insert->execute(
302
                $insert->execute(
243
                    $branchcode_value,
303
                    $branchcode_value,
Lines 248-254 return { Link Here
248
                );
308
                );
249
309
250
                my $most_frequent_restrict = $most_frequent_restrict{$branchcode}{$i};
310
                my $most_frequent_restrict = $most_frequent_restrict{$branchcode}{$i};
251
                say $out "Inserting $branchcode_value:undef:undef default most frequent restrict for overdue_$i: "
311
                say $out "Inserting "
312
                    . ( $branchcode_value // '' )
313
                    . ":undef:undef default most frequent restrict for overdue_$i: "
252
                    . $most_frequent_restrict;
314
                    . $most_frequent_restrict;
253
                $insert->execute(
315
                $insert->execute(
254
                    $branchcode_value,
316
                    $branchcode_value,
Lines 258-263 return { Link Here
258
                    $most_frequent_restrict
320
                    $most_frequent_restrict
259
                );
321
                );
260
322
323
                # Insert the has_rules rule for group $i's default context
324
                say $out "Inserting "
325
                    . ( $branchcode_value // '' )
326
                    . ":undef:undef default has_rules for overdue_$i: 1";
327
                $insert->execute(
328
                    $branchcode_value,
329
                    undef,
330
                    undef,
331
                    "overdue_${i}_has_rules",
332
                    1
333
                );
334
261
            }
335
            }
262
        }
336
        }
263
337
(-)a/koha-tmpl/intranet-tmpl/prog/js/vue/components/Admin/CirculationTriggers/CirculationTriggersFormAdd.vue (-32 / +28 lines)
Lines 638-644 export default { Link Here
638
            if (this.ruleSetToSubmit === null) {
638
            if (this.ruleSetToSubmit === null) {
639
                this.ruleSetToSubmit = {
639
                this.ruleSetToSubmit = {
640
                    context: this.context,
640
                    context: this.context,
641
                    [`overdue_${this.triggerNumber}_delay`]: this.minDelay,
641
                    [`overdue_${this.triggerNumber}_delay`]: `${this.minDelay}`,
642
                    [`overdue_${this.triggerNumber}_notice`]: null,
642
                    [`overdue_${this.triggerNumber}_notice`]: null,
643
                    [`overdue_${this.triggerNumber}_mtt`]: null,
643
                    [`overdue_${this.triggerNumber}_mtt`]: null,
644
                    [`overdue_${this.triggerNumber}_restrict`]: null,
644
                    [`overdue_${this.triggerNumber}_restrict`]: null,
Lines 742-749 export default { Link Here
742
                      this.currentRuleSet[`overdue_${priorTriggerNumber}_delay`]
742
                      this.currentRuleSet[`overdue_${priorTriggerNumber}_delay`]
743
                  ) + 1
743
                  ) + 1
744
                : 0;
744
                : 0;
745
            this.ruleSetToSubmit[`overdue_${this.triggerNumber}_delay`] =
746
                this.minDelay;
747
        },
745
        },
748
        setMaxDelay() {
746
        setMaxDelay() {
749
            const nextTriggerNumber = parseInt(this.triggerNumber) + 1;
747
            const nextTriggerNumber = parseInt(this.triggerNumber) + 1;
Lines 756-782 export default { Link Here
756
                : Infinity;
754
                : Infinity;
757
        },
755
        },
758
        setFilteredLetters() {
756
        setFilteredLetters() {
759
            let library = this.context.library_id;
757
            const library = this.currentRuleSet.library_id;
760
            const branchcodeMatches = letters.filter(
758
            const byCode = new Map();
761
                letter => letter.branchcode === library
759
762
            );
760
            for (const letter of this.letters) {
763
            const emptyBranchcodeMatches = letters.filter(
761
                if (letter.branchcode === library) {
764
                letter => letter.branchcode === ""
762
                    byCode.set(letter.code, letter); // override
765
            );
763
                } else if (
766
764
                    letter.branchcode === "" &&
767
            const uniqueCodes = [
765
                    !byCode.has(letter.code)
768
                ...new Set(
766
                ) {
769
                    [...branchcodeMatches, ...emptyBranchcodeMatches].map(
767
                    byCode.set(letter.code, letter);
770
                        letter => letter.code
768
                }
771
                    )
769
            }
772
                ),
773
            ];
774
770
775
            this.filteredLetters = letters.filter(
771
            this.filteredLetters = [...byCode.values()];
776
                letter =>
777
                    uniqueCodes.includes(letter.code) &&
778
                    (letter.branchcode === library || letter.branchcode === "")
779
            );
780
        },
772
        },
781
        incrementDelay() {
773
        incrementDelay() {
782
            // Check for minDelay and maxDelay
774
            // Check for minDelay and maxDelay
Lines 791-806 export default { Link Here
791
                    null
783
                    null
792
            ) {
784
            ) {
793
                this.ruleSetToSubmit[`overdue_${this.triggerNumber}_delay`] =
785
                this.ruleSetToSubmit[`overdue_${this.triggerNumber}_delay`] =
794
                    min;
786
                    `${min}`;
795
            }
787
            }
796
788
797
            // Increment within the valid range
789
            // Increment within the valid range
798
            else {
790
            else {
799
                this.ruleSetToSubmit[`overdue_${this.triggerNumber}_delay`] =
791
                this.ruleSetToSubmit[`overdue_${this.triggerNumber}_delay`] =
800
                    Math.min(
792
                    Math.min(
801
                        this.ruleSetToSubmit[
793
                        parseInt(
802
                            `overdue_${this.triggerNumber}_delay`
794
                            this.ruleSetToSubmit[
803
                        ] + 1,
795
                                `overdue_${this.triggerNumber}_delay`
796
                            ]
797
                        ) + 1,
804
                        max
798
                        max
805
                    );
799
                    );
806
            }
800
            }
Lines 809-820 export default { Link Here
809
        decrementDelay() {
803
        decrementDelay() {
810
            // Check for minDelay
804
            // Check for minDelay
811
            const min = this.minDelay !== undefined ? this.minDelay : 1;
805
            const min = this.minDelay !== undefined ? this.minDelay : 1;
806
            let delay = parseInt(
807
                this.ruleSetToSubmit[`overdue_${this.triggerNumber}_delay`]
808
            );
812
            // Decrement only if greater than minDelay
809
            // Decrement only if greater than minDelay
813
            if (
810
            if (delay > min) {
814
                this.ruleSetToSubmit[`overdue_${this.triggerNumber}_delay`] >
811
                delay--;
815
                min
812
                this.ruleSetToSubmit[`overdue_${this.triggerNumber}_delay`] =
816
            ) {
813
                    `${delay}`;
817
                this.ruleSetToSubmit[`overdue_${this.triggerNumber}_delay`]--;
818
            }
814
            }
819
            this.setAllowSubmission();
815
            this.setAllowSubmission();
820
        },
816
        },
(-)a/koha-tmpl/intranet-tmpl/prog/js/vue/stores/circulation-rules.js (-2 / +4 lines)
Lines 87-93 export const useCircRulesStore = defineStore("circRules", { Link Here
87
            return value.includes(type) ? $__("Yes") : $__("No");
87
            return value.includes(type) ? $__("Yes") : $__("No");
88
        },
88
        },
89
        hasConflict(oldRuleSet, newRuleSet, triggerNumber) {
89
        hasConflict(oldRuleSet, newRuleSet, triggerNumber) {
90
            if (!oldRuleSet) {
90
            if (
91
                !oldRuleSet ||
92
                oldRuleSet[`overdue_${triggerNumber}_has_rules`] === null
93
            ) {
91
                return false;
94
                return false;
92
            }
95
            }
93
            return (
96
            return (
94
- 

Return to bug 10190