Adding Absolute Timers to base timerboard

This commit is contained in:
Hamish W 2023-07-25 09:26:10 +00:00 committed by Ariel Rin
parent 6f4dffe930
commit 951c4135c2
6 changed files with 112 additions and 10 deletions

View File

@ -0,0 +1,30 @@
$(document).ready(() => {
'use strict';
const inputAbsoluteTime = $('input#id_absolute_time');
const inputCountdown = $('#id_days_left, #id_hours_left, #id_minutes_left');
//inputAbsoluteTime.prop('disabled', true);
inputAbsoluteTime.parent().hide()
inputAbsoluteTime.parent().prev('label').hide()
inputCountdown.prop('required', true);
$('input#id_absolute_checkbox').change(function () {
if ($(this).prop("checked")) {
// check box enabled
inputAbsoluteTime.parent().show()
inputAbsoluteTime.parent().prev('label').show()
inputCountdown.parent().hide()
inputCountdown.parent().prev('label').hide()
inputAbsoluteTime.prop('required', true);
inputCountdown.prop('required', false);
} else {
// Checkbox is not checked
inputAbsoluteTime.parent().hide()
inputAbsoluteTime.parent().prev('label').hide()
inputCountdown.parent().show()
inputCountdown.parent().prev('label').show()
inputAbsoluteTime.prop('required', false);
inputCountdown.prop('required', true);
}
});
});

View File

@ -0,0 +1,3 @@
{% load static %}
<script src="{% static 'allianceauth/js/timerboard.js' %}"></script>

View File

@ -61,14 +61,17 @@ class TimerForm(forms.ModelForm):
structure = forms.ChoiceField(choices=structure_choices, required=True, label=_("Structure Type")) structure = forms.ChoiceField(choices=structure_choices, required=True, label=_("Structure Type"))
timer_type = forms.ChoiceField(choices=TimerType.choices, label=_("Timer Type")) timer_type = forms.ChoiceField(choices=TimerType.choices, label=_("Timer Type"))
objective = forms.ChoiceField(choices=objective_choices, required=True, label=_("Objective")) objective = forms.ChoiceField(choices=objective_choices, required=True, label=_("Objective"))
days_left = forms.IntegerField(required=True, label=_("Days Remaining"), validators=[MinValueValidator(0)]) absolute_checkbox = forms.BooleanField(label=_("Absolute Timer"), required=False, initial=False)
hours_left = forms.IntegerField(required=True, label=_("Hours Remaining"), absolute_time = forms.CharField(required=False,label=_("Date and Time"))
days_left = forms.IntegerField(required=False, label=_("Days Remaining"), validators=[MinValueValidator(0)])
hours_left = forms.IntegerField(required=False, label=_("Hours Remaining"),
validators=[MinValueValidator(0), MaxValueValidator(23)]) validators=[MinValueValidator(0), MaxValueValidator(23)])
minutes_left = forms.IntegerField(required=True, label=_("Minutes Remaining"), minutes_left = forms.IntegerField(required=False, label=_("Minutes Remaining"),
validators=[MinValueValidator(0), MaxValueValidator(59)]) validators=[MinValueValidator(0), MaxValueValidator(59)])
important = forms.BooleanField(label=_("Important"), required=False) important = forms.BooleanField(label=_("Important"), required=False)
corp_timer = forms.BooleanField(label=_("Corp-Restricted"), required=False) corp_timer = forms.BooleanField(label=_("Corp-Restricted"), required=False)
def save(self, commit=True): def save(self, commit=True):
timer = super().save(commit=False) timer = super().save(commit=False)
@ -77,18 +80,30 @@ class TimerForm(forms.ModelForm):
corporation = character.corporation corporation = character.corporation
logger.debug("Determined timer save request on behalf " logger.debug("Determined timer save request on behalf "
"of character {} corporation {}".format(character, corporation)) "of character {} corporation {}".format(character, corporation))
# calculate future time
future_time = datetime.timedelta(days=self.cleaned_data['days_left'], hours=self.cleaned_data['hours_left'], days_left = self.cleaned_data['days_left']
minutes=self.cleaned_data['minutes_left']) hours_left = self.cleaned_data['hours_left']
current_time = timezone.now() minutes_left = self.cleaned_data['minutes_left']
eve_time = current_time + future_time absolute_time = self.cleaned_data['absolute_time']
logger.debug(
f"Determined timer eve time is {eve_time} - current time {current_time}, adding {future_time}") if days_left or hours_left or minutes_left:
# Calculate future time
future_time = datetime.timedelta(days=days_left, hours=hours_left, minutes=minutes_left)
current_time = timezone.now()
eve_time = current_time + future_time
logger.debug(f"Determined timer eve time is {eve_time} - current time {current_time}, adding {future_time}")
elif absolute_time:
# Use absolute time
eve_time = absolute_time
else:
raise ValueError("Either future time or absolute time must be provided.")
timer.eve_time = eve_time timer.eve_time = eve_time
timer.eve_character = character timer.eve_character = character
timer.eve_corp = corporation timer.eve_corp = corporation
timer.user = self.user timer.user = self.user
if commit: if commit:
timer.save() timer.save()
return timer return timer

View File

@ -30,3 +30,21 @@
</div> </div>
{% endblock content %} {% endblock content %}
{% block extra_javascript %}
{% include 'bundles/jquery-datetimepicker-js.html' %}
{% endblock %}
{% block extra_script %}
$('#id_start').datetimepicker({
setlocale: '{{ LANGUAGE_CODE }}',
{% if NIGHT_MODE %}
theme: 'dark',
{% else %}
theme: 'default',
{% endif %}
mask: true,
format: 'Y-m-d H:i',
minDate: 0
});
{% endblock extra_script %}

View File

@ -12,3 +12,19 @@
{% block submit_button_text %} {% block submit_button_text %}
{% translate "Create Timer" %} {% translate "Create Timer" %}
{% endblock %} {% endblock %}
{% block extra_javascript %}
{% include 'bundles/timerboard-js.html' %}
{% include 'bundles/jquery-datetimepicker-js.html' %}
{% include 'bundles/jquery-datetimepicker-css.html' %}
{% endblock %}
{% block extra_script %}
$('input#id_absolute_time').datetimepicker({
setlocale: '{{ LANGUAGE_CODE }}',
theme: {% if NIGHT_MODE %}'dark'{% else %}'default'{% endif %},
format: 'Y-m-d H:i',
minDate: 0,
defaultDate: null
});
{% endblock extra_script %}

View File

@ -12,3 +12,23 @@
{% block submit_button_text %} {% block submit_button_text %}
{% translate "Update Structure Timer" %} {% translate "Update Structure Timer" %}
{% endblock %} {% endblock %}
{% block extra_javascript %}
{% include 'bundles/timerboard-js.html' %}
{% include 'bundles/jquery-datetimepicker-js.html' %}
{% include 'bundles/jquery-datetimepicker-css.html' %}
{% endblock %}
{% block extra_script %}
$('input#id_absolute_time').datetimepicker({
setlocale: '{{ LANGUAGE_CODE }}',
{% if NIGHT_MODE %}
theme: 'dark',
{% else %}
theme: 'default',
{% endif %}
mask: true,
format: 'Y-m-d H:i',
defaultDate: null
});
{% endblock extra_script %}