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

(-)a/Koha/Calendar.pm (-12 / +18 lines)
Lines 144-150 sub addDate { Link Here
144
144
145
    $unit ||= 'days'; # default days ?
145
    $unit ||= 'days'; # default days ?
146
    my $dt;
146
    my $dt;
147
148
    if ( $unit eq 'hours' ) {
147
    if ( $unit eq 'hours' ) {
149
        # Fixed for legacy support. Should be set as a branch parameter
148
        # Fixed for legacy support. Should be set as a branch parameter
150
        my $return_by_hour = 10;
149
        my $return_by_hour = 10;
Lines 154-160 sub addDate { Link Here
154
        # days
153
        # days
155
        $dt = $self->addDays($startdate, $add_duration);
154
        $dt = $self->addDays($startdate, $add_duration);
156
    }
155
    }
157
158
    return $dt;
156
    return $dt;
159
}
157
}
160
158
Lines 206-225 sub addDays { Link Here
206
            }
204
            }
207
        }
205
        }
208
206
209
    } else { # Days or Datedue
207
    } else { # Days, Datedue or Dayweek
210
        # use straight days, then use calendar to push
208
        # use straight days, then use calendar to push
211
        # the date to the next open day if Datedue
209
        # the date to the next open day as appropriate
210
        # if Datedue or Dayweek
212
        $base_date->add_duration($days_duration);
211
        $base_date->add_duration($days_duration);
213
212
214
        if ( $self->{days_mode} eq 'Datedue' ) {
213
        if ( $self->{days_mode} eq 'Datedue' ||
215
            # Datedue, then use the calendar to push
214
            $self->{days_mode} eq 'Dayweek') {
215
            # Datedue or Dayweek, then use the calendar to push
216
            # the date to the next open day if holiday
216
            # the date to the next open day if holiday
217
            if ( $self->is_holiday($base_date) ) {
217
            if ( $self->is_holiday($base_date) ) {
218
218
                my $dow = $base_date->day_of_week;
219
                my $days = $days_duration->in_units('days');
220
                my $push_amt = (
221
                    # We're using Dayweek useDaysMode option
222
                    $self->{days_mode} eq 'Dayweek' &&
223
                    # It's period based on weeks
224
                    $days % 7 == 0 &&
225
                    # It's not a permanently closed day
226
                    !$self->{weekly_closed_days}->[$dow] == 1
227
                ) ? 7 : 1;
219
                if ( $days_duration->is_negative() ) {
228
                if ( $days_duration->is_negative() ) {
220
                    $base_date = $self->prev_open_day($base_date);
229
                    $base_date = $self->prev_open_days($base_date, $push_amt);
221
                } else {
230
                } else {
222
                    $base_date = $self->next_open_day($base_date);
231
                    $base_date = $self->next_open_days($base_date, $push_amt);
223
                }
232
                }
224
            }
233
            }
225
        }
234
        }
Lines 275-285 sub next_open_days { Link Here
275
    my $base_date = $dt->clone();
284
    my $base_date = $dt->clone();
276
285
277
    $base_date->add(days => $to_add);
286
    $base_date->add(days => $to_add);
278
279
    while ($self->is_holiday($base_date)) {
287
    while ($self->is_holiday($base_date)) {
280
        $base_date->add(days => $to_add);
288
        $base_date->add(days => $to_add);
281
    }
289
    }
282
283
    return $base_date;
290
    return $base_date;
284
}
291
}
285
292
286
- 

Return to bug 15260