manager: duplicate event from agenda settings view (#68259)

This commit is contained in:
Valentin Deniaud 2022-08-18 14:35:29 +02:00
parent 34ba59e925
commit 25ddefb06f
4 changed files with 16 additions and 32 deletions

View File

@ -384,6 +384,13 @@ ul.objects-list.single-links li a.link-action-icon.refresh {
}
}
ul.objects-list.single-links li a.link-action-icon.duplicate {
margin-right: 3em;
&::before {
content: "\f24d"; /* clone */
}
}
div.ui-dialog form p span.datetime input {
width: auto;
}

View File

@ -52,6 +52,7 @@
</span>
</a>
{% if view_mode == 'settings_view' %}
<a rel="popup" class="link-action-icon duplicate" href="{% url 'chrono-manager-event-duplicate' pk=agenda.pk event_pk=event.pk %}">{% trans 'Duplicate' %}</a>
<a rel="popup" class="delete" href="{% url 'chrono-manager-event-delete' pk=agenda.pk event_pk=event.pk %}?next=settings">{% trans "remove" %}</a>
{% elif agenda.booking_form_url %}
<a class="link-action-text" href="{{ event.get_booking_form_url }}&ReturnURL={{ request.build_absolute_uri }}">{% trans "Booking form" %}</a>

View File

@ -20,9 +20,6 @@
{% if not object.primary_event %}
<a rel="popup" href="{% url 'chrono-manager-event-delete' pk=object.agenda.id event_pk=object.id %}?next={{view.request.GET.next}}">{% trans 'Delete' %}</a>
{% endif %}
{% if not object.primary_event %}
<a rel="popup" href="{% url 'chrono-manager-event-duplicate' pk=object.agenda.id event_pk=object.id %}">{% trans 'Duplicate' %}</a>
{% endif %}
</span>
{% else %}
<h2>{% trans "New Event" %}</h2>

View File

@ -2488,7 +2488,7 @@ def test_event_check_primary_booking(app, admin_user):
def test_duplicate_event(app, admin_user):
agenda = Agenda.objects.create(label='Foo Bar', slug='foo-bar', kind='meetings')
agenda = Agenda.objects.create(label='Foo Bar', slug='foo-bar', kind='events')
event = Event.objects.create(
agenda=agenda,
start_datetime=now(),
@ -2508,8 +2508,8 @@ def test_duplicate_event(app, admin_user):
)
app = login(app)
resp = app.get(f'/manage/agendas/{agenda.pk}/events/{event.pk}/edit')
resp = resp.click('Duplicate')
resp = app.get(f'/manage/agendas/{agenda.pk}/settings')
resp = resp.click('Duplicate', href='events')
resp.form['label'] = "Bar"
resp.form['start_datetime_0'] = str(new_datetime.date())
resp.form['start_datetime_1'] = '17:00'
@ -2532,7 +2532,7 @@ def test_duplicate_event(app, admin_user):
def test_duplicate_event_creates_recurrences(app, admin_user):
agenda = Agenda.objects.create(label='Foo Bar', slug='foo-bar', kind='meetings')
agenda = Agenda.objects.create(label='Foo Bar', slug='foo-bar', kind='events')
event_start = now().replace(hour=1, minute=0)
recurring_event = Event.objects.create(
agenda=agenda,
@ -2546,8 +2546,8 @@ def test_duplicate_event_creates_recurrences(app, admin_user):
assert Event.objects.count() == 1
app = login(app)
resp = app.get(f'/manage/agendas/{agenda.pk}/events/{recurring_event.pk}/edit')
resp = resp.click('Duplicate')
resp = app.get(f'/manage/agendas/{agenda.pk}/settings')
resp = resp.click('Duplicate', href='events')
resp.form['label'] = "Bar"
resp.form['start_datetime_0'] = str(event_start.date())
resp.form['start_datetime_1'] = '17:00'
@ -2559,26 +2559,5 @@ def test_duplicate_event_creates_recurrences(app, admin_user):
assert duplicate != recurring_event
assert duplicate.recurrences.count() == 6
def test_cannot_duplicate_secondary_event(app, admin_user):
agenda = Agenda.objects.create(label='Foo Bar', slug='foo-bar', kind='meetings')
recurring_event = Event.objects.create(
agenda=agenda,
start_datetime=now(),
places=10,
label='Foo',
)
# this event was created automatically as part of a recurring event
# it can't be duplicated
event = Event.objects.create(
agenda=agenda,
start_datetime=now(),
places=10,
primary_event=recurring_event,
)
app = login(app)
resp = app.get(f'/manage/agendas/{agenda.pk}/events/{event.pk}/edit')
assert 'Duplicate' not in resp.text
app.get(f'/manage/agendas/{agenda.pk}/events/{event.pk}/duplicate', status=404)
event_recurrence = duplicate.recurrences.first()
app.get(f'/manage/agendas/{agenda.pk}/events/{event_recurrence.pk}/duplicate', status=404)