mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-10 13:00:16 +02:00
Adding Absolute Timers to base timerboard
This commit is contained in:
parent
6f4dffe930
commit
951c4135c2
30
allianceauth/static/allianceauth/js/timerboard.js
Normal file
30
allianceauth/static/allianceauth/js/timerboard.js
Normal 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);
|
||||
}
|
||||
});
|
||||
});
|
3
allianceauth/templates/bundles/timerboard-js.html
Normal file
3
allianceauth/templates/bundles/timerboard-js.html
Normal file
@ -0,0 +1,3 @@
|
||||
{% load static %}
|
||||
|
||||
<script src="{% static 'allianceauth/js/timerboard.js' %}"></script>
|
@ -61,14 +61,17 @@ class TimerForm(forms.ModelForm):
|
||||
structure = forms.ChoiceField(choices=structure_choices, required=True, label=_("Structure Type"))
|
||||
timer_type = forms.ChoiceField(choices=TimerType.choices, label=_("Timer Type"))
|
||||
objective = forms.ChoiceField(choices=objective_choices, required=True, label=_("Objective"))
|
||||
days_left = forms.IntegerField(required=True, label=_("Days Remaining"), validators=[MinValueValidator(0)])
|
||||
hours_left = forms.IntegerField(required=True, label=_("Hours Remaining"),
|
||||
absolute_checkbox = forms.BooleanField(label=_("Absolute Timer"), required=False, initial=False)
|
||||
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)])
|
||||
minutes_left = forms.IntegerField(required=True, label=_("Minutes Remaining"),
|
||||
minutes_left = forms.IntegerField(required=False, label=_("Minutes Remaining"),
|
||||
validators=[MinValueValidator(0), MaxValueValidator(59)])
|
||||
important = forms.BooleanField(label=_("Important"), required=False)
|
||||
corp_timer = forms.BooleanField(label=_("Corp-Restricted"), required=False)
|
||||
|
||||
|
||||
def save(self, commit=True):
|
||||
timer = super().save(commit=False)
|
||||
|
||||
@ -77,18 +80,30 @@ class TimerForm(forms.ModelForm):
|
||||
corporation = character.corporation
|
||||
logger.debug("Determined timer save request on behalf "
|
||||
"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'],
|
||||
minutes=self.cleaned_data['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}")
|
||||
|
||||
days_left = self.cleaned_data['days_left']
|
||||
hours_left = self.cleaned_data['hours_left']
|
||||
minutes_left = self.cleaned_data['minutes_left']
|
||||
absolute_time = self.cleaned_data['absolute_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_character = character
|
||||
timer.eve_corp = corporation
|
||||
timer.user = self.user
|
||||
|
||||
if commit:
|
||||
timer.save()
|
||||
|
||||
return timer
|
||||
|
@ -30,3 +30,21 @@
|
||||
</div>
|
||||
|
||||
{% 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 %}
|
||||
|
@ -12,3 +12,19 @@
|
||||
{% block submit_button_text %}
|
||||
{% translate "Create Timer" %}
|
||||
{% 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 %}
|
||||
|
@ -12,3 +12,23 @@
|
||||
{% block submit_button_text %}
|
||||
{% translate "Update Structure Timer" %}
|
||||
{% 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 %}
|
||||
|
Loading…
x
Reference in New Issue
Block a user