Projet

Général

Profil

0001-manager-make-time-period-exception-source-views-more.patch

Valentin Deniaud, 24 mars 2022 18:46

Télécharger (8,93 ko)

Voir les différences:

Subject: [PATCH 1/2] manager: make time period exception source views more
 generic (#52370)

 .../chrono/manager_confirm_source_delete.html |  4 +-
 .../chrono/manager_import_exceptions.html     |  5 +-
 .../chrono/manager_replace_exceptions.html    |  2 +-
 .../manager_time_period_exception_form.html   |  2 +-
 chrono/manager/views.py                       | 50 +++----------------
 5 files changed, 14 insertions(+), 49 deletions(-)
chrono/manager/templates/chrono/manager_confirm_source_delete.html
1
{% extends "chrono/manager_home.html" %}
1
{% extends base_template %}
2 2
{% load i18n %}
3 3

  
4 4
{% block appbar %}
......
13 13
  </p>
14 14
  <div class="buttons">
15 15
    <button class="delete-button">{% trans 'Delete' %}</button>
16
    <a class="cancel" href="{% url 'chrono-manager-agenda-settings' object.desk.agenda_id %}">{% trans 'Cancel' %}</a>
16
    <a class="cancel" href="{{ view.get_success_url }}">{% trans 'Cancel' %}</a>
17 17
  </div>
18 18
</form>
19 19
{% endblock %}
chrono/manager/templates/chrono/manager_import_exceptions.html
1
{% extends "chrono/manager_agenda_view.html" %}
1
{% extends base_template %}
2 2
{% load i18n %}
3 3

  
4 4
{% block extrascripts %}
......
8 8

  
9 9
{% block breadcrumb %}
10 10
{{ block.super }}
11
<a href="{% url 'chrono-manager-agenda-settings' agenda.pk %}">{% trans 'Settings' %}</a>
12 11
<a href="">{% trans "Manage exception sources" %}</a>
13 12
{% endblock %}
14 13

  
......
52 51
  </p>
53 52
  <div class="buttons">
54 53
    <button>{% trans "Import" %}</button>
55
    <a class="cancel" href="{% url 'chrono-manager-agenda-settings' pk=agenda.id %}">{% trans 'Cancel' %}</a>
54
    <a class="cancel" href="{{ view.get_success_url }}">{% trans 'Cancel' %}</a>
56 55
  </div>
57 56
</form>
58 57
{% endblock %}
chrono/manager/templates/chrono/manager_replace_exceptions.html
14 14
  </p>
15 15
  <div class="buttons">
16 16
    <button>{% trans "Replace" %}</button>
17
    <a class="cancel" href="{% url 'chrono-manager-agenda-settings' pk=agenda.id %}">{% trans 'Cancel' %}</a>
17
    <a class="cancel" href="{{ view.get_success_url }">{% trans 'Cancel' %}</a>
18 18
  </div>
19 19
</form>
20 20
{% endblock %}
chrono/manager/templates/chrono/manager_time_period_exception_form.html
40 40
  {% endfor %}
41 41
  <div class="buttons">
42 42
    <button class="submit-button">{% trans "Save" %}</button>
43
    <a class="cancel" href="{{ cancel_url }}">{% trans 'Cancel' %}</a>
43
    <a class="cancel" href="{{ view.get_success_url }}">{% trans 'Cancel' %}</a>
44 44
  </div>
45 45

  
46 46
  <script>
chrono/manager/views.py
1584 1584
        return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.desk.agenda.id})
1585 1585

  
1586 1586

  
1587
class ManagedDeskSubobjectMixin:
1588
    desk = None
1589

  
1590
    def dispatch(self, request, *args, **kwargs):
1591
        self.desk = self.get_object().desk
1592
        if not self.desk.agenda.can_be_managed(request.user):
1593
            raise PermissionDenied()
1594
        return super().dispatch(request, *args, **kwargs)
1595

  
1596
    def get_context_data(self, **kwargs):
1597
        context = super().get_context_data(**kwargs)
1598
        context['desk'] = self.object.desk
1599
        context['agenda'] = self.object.desk.agenda
1600
        return context
1601

  
1602
    def get_success_url(self):
1603
        return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.desk.agenda.id})
1604

  
1605

  
1606 1587
class ManagedTimePeriodMixin:
1607 1588
    agenda = None
1608 1589

  
......
1647 1628
        if self.desk:
1648 1629
            context['desk'] = self.object.desk
1649 1630
            context['agenda'] = self.object.desk.agenda
1631
            context['base_template'] = 'chrono/manager_agenda_settings.html'
1650 1632
        else:
1651 1633
            context['unavailability_calendar'] = self.unavailability_calendar
1634
            context['base_template'] = 'chrono/manager_unavailability_calendar_settings.html'
1652 1635
        return context
1653 1636

  
1654 1637
    def get_success_url(self):
......
2707 2690
    model = TimePeriodException
2708 2691
    form_class = TimePeriodExceptionForm
2709 2692

  
2710
    def get_context_data(self, **kwargs):
2711
        context = super().get_context_data(**kwargs)
2712
        if self.desk:
2713
            context['base_template'] = 'chrono/manager_agenda_settings.html'
2714
            context['cancel_url'] = reverse(
2715
                'chrono-manager-agenda-settings', kwargs={'pk': self.desk.agenda.pk}
2716
            )
2717
        elif self.unavailability_calendar:
2718
            context['base_template'] = 'chrono/manager_unavailability_calendar_settings.html'
2719
            context['cancel_url'] = reverse(
2720
                'chrono-manager-unavailability-calendar-settings',
2721
                kwargs={'pk': self.unavailability_calendar.pk},
2722
            )
2723
        return context
2724

  
2725 2693
    def form_valid(self, form):
2726 2694
        result = super().form_valid(form)
2727 2695
        messages.info(self.request, _('Exception updated.'))
......
2829 2797
                )
2830 2798
            )
2831 2799
        )
2800
        context['base_template'] = 'chrono/manager_agenda_settings.html'
2832 2801
        return context
2833 2802

  
2834 2803
    def import_file(self, desk, form):
......
2871 2840
desk_import_time_period_exceptions = DeskImportTimePeriodExceptionsView.as_view()
2872 2841

  
2873 2842

  
2874
class TimePeriodExceptionSourceDeleteView(ManagedDeskSubobjectMixin, DeleteView):
2843
class TimePeriodExceptionSourceDeleteView(ManagedTimePeriodExceptionMixin, DeleteView):
2875 2844
    template_name = 'chrono/manager_confirm_source_delete.html'
2876 2845
    model = TimePeriodExceptionSource
2877 2846

  
2878
    def get_success_url(self):
2879
        return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.desk.agenda_id})
2880

  
2881 2847
    def delete(self, request, *args, **kwargs):
2882 2848
        source = self.get_object()
2883 2849
        response = super().delete(request, *args, **kwargs)
......
2900 2866
time_period_exception_source_delete = TimePeriodExceptionSourceDeleteView.as_view()
2901 2867

  
2902 2868

  
2903
class TimePeriodExceptionSourceReplaceView(ManagedDeskSubobjectMixin, UpdateView):
2869
class TimePeriodExceptionSourceReplaceView(ManagedTimePeriodExceptionMixin, UpdateView):
2904 2870
    model = TimePeriodExceptionSource
2905 2871
    form_class = TimePeriodExceptionSourceReplaceForm
2906 2872
    template_name = 'chrono/manager_replace_exceptions.html'
......
2935 2901
time_period_exception_source_replace = TimePeriodExceptionSourceReplaceView.as_view()
2936 2902

  
2937 2903

  
2938
class TimePeriodExceptionSourceRefreshView(ManagedDeskSubobjectMixin, DetailView):
2904
class TimePeriodExceptionSourceRefreshView(ManagedTimePeriodExceptionMixin, DetailView):
2939 2905
    model = TimePeriodExceptionSource
2940 2906

  
2941 2907
    def get_queryset(self):
......
2960 2926

  
2961 2927
        messages.info(self.request, _('Exceptions will be synchronized in a few minutes.'))
2962 2928
        # redirect to settings
2963
        return HttpResponseRedirect(reverse('chrono-manager-agenda-settings', kwargs={'pk': desk.agenda_id}))
2929
        return HttpResponseRedirect(self.get_success_url())
2964 2930

  
2965 2931

  
2966 2932
time_period_exception_source_refresh = TimePeriodExceptionSourceRefreshView.as_view()
......
3166 3132
event_create_recurrence = EventCreateRecurrenceView.as_view()
3167 3133

  
3168 3134

  
3169
class TimePeriodExceptionSourceToggleView(ManagedDeskSubobjectMixin, DetailView):
3135
class TimePeriodExceptionSourceToggleView(ManagedTimePeriodExceptionMixin, DetailView):
3170 3136
    model = TimePeriodExceptionSource
3171 3137

  
3172 3138
    def get_object(self, queryset=None):
3173
-