@@ -157,7 +157,7 @@ def for_definition_with_quality?
157157 end
158158
159159 def has_requested_extension?
160- extensions > 0 && will_save_change_to_extensions? && extensions > extensions_in_database
160+ extensions != 0 && will_save_change_to_extensions? && extensions != extensions_in_database
161161 end
162162
163163 def must_have_quality_pts
@@ -169,7 +169,7 @@ def must_have_quality_pts
169169 # Ensure that extensions do not exceed the defined due date
170170 def extensions_must_end_with_due_date
171171 # First check the raw extension date - but allow it to be up to a week later in case due date and target date are on different days
172- if raw_extension_date . to_date - 7 . days >= task_definition . due_date . to_date
172+ if raw_extension_date - 7 . days >= max_date_with_spec_con_days
173173 errors . add ( :extensions , "have exceeded deadline for task. Work must be submitted within current timeframe. Work submitted after current due date will be assessed in the portfolio" )
174174 end
175175 end
@@ -259,21 +259,26 @@ def processing_pdf?
259259
260260 # Get the raw extension date - with extensions representing weeks
261261 def raw_extension_date
262- target_date + extensions . weeks
262+ target_date . to_date + extensions . weeks
263+ end
264+
265+ def max_date_with_spec_con_days
266+ task_definition . due_date . to_date + project . spec_con_days . days
263267 end
264268
265269 # Get the adjusted extension date, which ensures it is never past the due date
266270 def extension_date
267271 result = raw_extension_date
268- return task_definition . due_date if result > task_definition . due_date
272+ max_date = max_date_with_spec_con_days
273+ return max_date if result > max_date
269274
270275 return result
271276 end
272277
273278 # The student can apply for an extension if the current extension date is
274279 # before the task's due date
275280 def can_apply_for_extension?
276- raw_extension_date . to_date < task_definition . due_date . to_date
281+ raw_extension_date < max_date_with_spec_con_days
277282 end
278283
279284 def tutor
@@ -308,15 +313,18 @@ def apply_for_extension(user, text, weeks)
308313 end
309314
310315 def weeks_can_extend
311- deadline = task_definition . due_date . to_date
312- current_due = raw_extension_date . to_date
316+ deadline = max_date_with_spec_con_days
317+ current_due = raw_extension_date
313318
314319 diff = deadline - current_due
315320 ( diff . to_f / 7 ) . ceil
316321 end
317322
318323 # Add an extension to the task
319324 def grant_extension ( by_user , weeks )
325+ # Only used when extensions are allowed - not if the student manages the dates
326+ return if unit . allow_flexible_dates
327+
320328 weeks_to_extend = [ weeks , weeks_can_extend ] . min
321329 return false unless weeks_to_extend > 0
322330
@@ -643,7 +651,9 @@ def engage(engagement_status)
643651 def submitted_before_due?
644652 return true if due_date . blank?
645653
646- to_same_day_anywhere_on_earth ( due_date ) >= self . submission_date
654+ # When using flexible dates, we need to check against the deadline
655+ check_date = unit . allow_flexible_dates ? max_date_with_spec_con_days : due_date
656+ to_same_day_anywhere_on_earth ( check_date ) >= self . submission_date
647657 end
648658
649659 #
0 commit comments