0001-agendas-rename-flag-on-exception-sourced-from-settin.patch
chrono/agendas/migrations/0068_remove_timeperiodexception_external.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# Generated by Django 1.11.18 on 2020-10-27 09:32 |
|
3 |
from __future__ import unicode_literals |
|
4 | ||
5 |
from django.db import migrations |
|
6 | ||
7 | ||
8 |
class Migration(migrations.Migration): |
|
9 | ||
10 |
dependencies = [ |
|
11 |
('agendas', '0067_auto_20201021_1746'), |
|
12 |
] |
|
13 | ||
14 |
operations = [ |
|
15 |
migrations.RemoveField(model_name='timeperiodexception', name='external',), |
|
16 |
] |
chrono/agendas/models.py | ||
---|---|---|
1479 | 1479 |
label=label, |
1480 | 1480 |
start_datetime=start_datetime, |
1481 | 1481 |
end_datetime=end_datetime, |
1482 |
external=True, |
|
1483 | 1482 |
) |
1484 | 1483 |
self.enabled = True |
1485 | 1484 |
self.save() |
... | ... | |
1553 | 1552 |
end_datetime = models.DateTimeField(_('Exception end time')) |
1554 | 1553 |
update_datetime = models.DateTimeField(auto_now=True) |
1555 | 1554 |
recurrence_id = models.PositiveIntegerField(_('Recurrence ID'), default=0) |
1556 |
external = models.BooleanField(_('Exception comes from external source'), default=False) |
|
1555 | ||
1556 |
@property |
|
1557 |
def from_settings(self): |
|
1558 |
return self.source and self.source.settings_slug |
|
1557 | 1559 | |
1558 | 1560 |
class Meta: |
1559 | 1561 |
ordering = ['start_datetime'] |
... | ... | |
1583 | 1585 |
) |
1584 | 1586 | |
1585 | 1587 |
if self.label: |
1586 |
label = _(self.label) if self.external else self.label
|
|
1588 |
label = _(self.label) if self.from_settings else self.label
|
|
1587 | 1589 |
exc_repr = u'%s (%s)' % (label, exc_repr) |
1588 | 1590 | |
1589 | 1591 |
return exc_repr |
chrono/manager/templates/chrono/manager_meetings_agenda_settings.html | ||
---|---|---|
73 | 73 |
{% url 'chrono-manager-agenda-add-time-period-exception' agenda_pk=object.pk pk=desk.pk as add_time_period_exception_url %} |
74 | 74 |
<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> |
75 | 75 |
{% for exception in desk.get_exceptions_within_two_weeks %} |
76 |
<li><a rel="popup" {% if not exception.external %}href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.pk %}"{% endif %}>
|
|
76 |
<li><a rel="popup" {% if not exception.from_settings%}href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.pk %}"{% endif %}>
|
|
77 | 77 |
{{ exception }} |
78 |
{% if not exception.external %}
|
|
78 |
{% if not exception.from_settings%}
|
|
79 | 79 |
<a rel="popup" class="delete" href="{% url 'chrono-manager-time-period-exception-delete' pk=exception.id %}">{% trans "remove" %}</a> |
80 | 80 |
{% endif %} |
81 | 81 |
{% endfor %} |
chrono/manager/templates/chrono/manager_time_period_exception_list.html | ||
---|---|---|
20 | 20 |
<ul class="objects-list single-links"> |
21 | 21 |
{% for exception in object_list %} |
22 | 22 |
<li> |
23 |
<a {% if user_can_manage and not exception.external %}href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.id %}"{% endif %}>{{ exception }}</a>
|
|
24 |
{% 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 %}
|
|
23 |
<a {% if user_can_manage and not exception.from_settings%}href="{% url 'chrono-manager-time-period-exception-edit' pk=exception.id %}"{% endif %}>{{ exception }}</a>
|
|
24 |
{% 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 %}
|
|
25 | 25 |
</li> |
26 | 26 |
{% endfor %} |
27 | 27 |
</ul> |
chrono/manager/views.py | ||
---|---|---|
1937 | 1937 |
paginate_by = 20 |
1938 | 1938 | |
1939 | 1939 |
def get_queryset(self): |
1940 |
return self.model.objects.filter(desk=self.desk, end_datetime__gte=now()) |
|
1940 |
return self.model.objects.filter(desk=self.desk, end_datetime__gte=now()).select_related('source')
|
|
1941 | 1941 | |
1942 | 1942 |
def get_context_data(self, **kwargs): |
1943 | 1943 |
context = super(TimePeriodExceptionListView, self).get_context_data(**kwargs) |
... | ... | |
1976 | 1976 |
return success_url |
1977 | 1977 | |
1978 | 1978 |
def get_queryset(self): |
1979 |
return super().get_queryset().filter(external=False)
|
|
1979 |
return super().get_queryset().filter(source__settings_slug__isnull=True)
|
|
1980 | 1980 | |
1981 | 1981 | |
1982 | 1982 |
time_period_exception_delete = TimePeriodExceptionDeleteView.as_view() |
tests/test_manager.py | ||
---|---|---|
2257 | 2257 |
assert resp.request.url.endswith('/manage/time-period-exceptions/%d/exception-list' % desk.pk) |
2258 | 2258 | |
2259 | 2259 | |
2260 |
@override_settings( |
|
2261 |
EXCEPTIONS_SOURCES={'holidays': {'class': 'workalendar.europe.France', 'label': 'Holidays'},} |
|
2262 |
) |
|
2260 | 2263 |
def test_exception_list(app, admin_user): |
2261 | 2264 |
agenda = Agenda.objects.create(label='Foo bar', kind='meetings') |
2262 | 2265 |
desk = Desk.objects.create(agenda=agenda, label='Desk A') |
... | ... | |
2299 | 2302 |
assert '/manage/time-period-exceptions/%d/edit' % current_exception.pk in resp.text |
2300 | 2303 |
assert '/manage/time-period-exceptions/%d/edit' % future_exception.pk in resp.text |
2301 | 2304 | |
2305 |
with CaptureQueriesContext(connection) as ctx: |
|
2306 |
app.get("/manage/time-period-exceptions/%d/exception-list" % desk.pk) |
|
2307 |
assert len(ctx.captured_queries) == 6 |
|
2308 | ||
2309 |
desk.import_timeperiod_exceptions_from_settings(enable=True) |
|
2310 |
with CaptureQueriesContext(connection) as ctx: |
|
2311 |
app.get("/manage/time-period-exceptions/%d/exception-list" % desk.pk) |
|
2312 |
assert len(ctx.captured_queries) == 6 |
|
2313 | ||
2302 | 2314 | |
2303 | 2315 |
def test_agenda_import_time_period_exception_from_ics(app, admin_user): |
2304 | 2316 |
agenda = Agenda.objects.create(label='Example', kind='meetings') |
2305 |
- |