agendas: rename flag on exception sourced from settings (#47966)

This commit is contained in:
Valentin Deniaud 2020-10-26 16:55:59 +01:00
parent bdfeccafac
commit 06220c72e2
6 changed files with 39 additions and 9 deletions

View File

@ -0,0 +1,16 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.18 on 2020-10-27 09:32
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('agendas', '0067_auto_20201021_1746'),
]
operations = [
migrations.RemoveField(model_name='timeperiodexception', name='external',),
]

View File

@ -1479,7 +1479,6 @@ class TimePeriodExceptionSource(models.Model):
label=label,
start_datetime=start_datetime,
end_datetime=end_datetime,
external=True,
)
self.enabled = True
self.save()
@ -1553,7 +1552,10 @@ class TimePeriodException(models.Model):
end_datetime = models.DateTimeField(_('Exception end time'))
update_datetime = models.DateTimeField(auto_now=True)
recurrence_id = models.PositiveIntegerField(_('Recurrence ID'), default=0)
external = models.BooleanField(_('Exception comes from external source'), default=False)
@property
def from_settings(self):
return self.source and self.source.settings_slug
class Meta:
ordering = ['start_datetime']
@ -1583,7 +1585,7 @@ class TimePeriodException(models.Model):
)
if self.label:
label = _(self.label) if self.external else self.label
label = _(self.label) if self.from_settings else self.label
exc_repr = u'%s (%s)' % (label, exc_repr)
return exc_repr

View File

@ -73,9 +73,9 @@
{% url 'chrono-manager-agenda-add-time-period-exception' agenda_pk=object.pk pk=desk.pk as add_time_period_exception_url %}
<li><a><strong>{% trans 'Exceptions' %}</strong></a><a class="link-action-icon settings" rel="popup" href="{% url 'chrono-manager-desk-add-import-time-period-exceptions' pk=desk.pk %}" title="{% trans 'Manage exception sources' %}">{% trans 'manage exceptions' %}</a></li>
{% for exception in desk.get_exceptions_within_two_weeks %}
<li><a rel="popup" {% if not exception.external %}href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.pk %}"{% endif %}>
<li><a rel="popup" {% if not exception.from_settings%}href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.pk %}"{% endif %}>
{{ exception }}
{% if not exception.external %}
{% if not exception.from_settings%}
<a rel="popup" class="delete" href="{% url 'chrono-manager-time-period-exception-delete' pk=exception.id %}">{% trans "remove" %}</a>
{% endif %}
{% endfor %}

View File

@ -20,8 +20,8 @@
<ul class="objects-list single-links">
{% for exception in object_list %}
<li>
<a {% if user_can_manage and not exception.external %}href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.id %}"{% endif %}>{{ exception }}</a>
{% if user_can_manage and not exception.external %}<a rel="popup" class="delete" href="{% url 'chrono-manager-time-period-exception-delete' pk=exception.id %}{% if not page_obj %}?from_popup{% endif %}">{% trans "remove" %}</a>{% endif %}
<a {% if user_can_manage and not exception.from_settings%}href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.id %}"{% endif %}>{{ exception }}</a>
{% if user_can_manage and not exception.from_settings%}<a rel="popup" class="delete" href="{% url 'chrono-manager-time-period-exception-delete' pk=exception.id %}{% if not page_obj %}?from_popup{% endif %}">{% trans "remove" %}</a>{% endif %}
</li>
{% endfor %}
</ul>

View File

@ -1937,7 +1937,7 @@ class TimePeriodExceptionListView(ManagedDeskMixin, ListView):
paginate_by = 20
def get_queryset(self):
return self.model.objects.filter(desk=self.desk, end_datetime__gte=now())
return self.model.objects.filter(desk=self.desk, end_datetime__gte=now()).select_related('source')
def get_context_data(self, **kwargs):
context = super(TimePeriodExceptionListView, self).get_context_data(**kwargs)
@ -1976,7 +1976,7 @@ class TimePeriodExceptionDeleteView(ManagedTimePeriodExceptionMixin, DeleteView)
return success_url
def get_queryset(self):
return super().get_queryset().filter(external=False)
return super().get_queryset().filter(source__settings_slug__isnull=True)
time_period_exception_delete = TimePeriodExceptionDeleteView.as_view()

View File

@ -2257,6 +2257,9 @@ def test_meetings_agenda_delete_time_period_exception(app, admin_user):
assert resp.request.url.endswith('/manage/time-period-exceptions/%d/exception-list' % desk.pk)
@override_settings(
EXCEPTIONS_SOURCES={'holidays': {'class': 'workalendar.europe.France', 'label': 'Holidays'},}
)
def test_exception_list(app, admin_user):
agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
desk = Desk.objects.create(agenda=agenda, label='Desk A')
@ -2299,6 +2302,15 @@ def test_exception_list(app, admin_user):
assert '/manage/time-period-exceptions/%d/edit' % current_exception.pk in resp.text
assert '/manage/time-period-exceptions/%d/edit' % future_exception.pk in resp.text
with CaptureQueriesContext(connection) as ctx:
app.get("/manage/time-period-exceptions/%d/exception-list" % desk.pk)
assert len(ctx.captured_queries) == 6
desk.import_timeperiod_exceptions_from_settings(enable=True)
with CaptureQueriesContext(connection) as ctx:
app.get("/manage/time-period-exceptions/%d/exception-list" % desk.pk)
assert len(ctx.captured_queries) == 6
def test_agenda_import_time_period_exception_from_ics(app, admin_user):
agenda = Agenda.objects.create(label='Example', kind='meetings')