Event planning #491

This commit is contained in:
Daniel Grams 2023-06-09 13:33:27 +02:00
parent 6ea04e0260
commit 74f28d3be2
36 changed files with 1270 additions and 756 deletions

View File

@ -1,12 +1,11 @@
describe("Planing", () => {
describe("Planning", () => {
it("search", () => {
cy.login();
cy.createAdminUnit().then(function (adminUnitId) {
cy.createEvent(adminUnitId).then(function (eventId) {
cy.visit("/planing");
cy.screenshot("search-form");
cy.screenshotDatepicker("#date_from-user");
cy.get('#submit').click();
cy.visit("/planning");
cy.wait(2000); // Wait for Vue to load
cy.screenshot("result");
});
});

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2023-06-02 12:16+0200\n"
"POT-Creation-Date: 2023-06-09 13:32+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -202,24 +202,24 @@ msgstr ""
msgid "You have received an invitation"
msgstr ""
#: project/forms/admin.py:11 project/templates/layout.html:334
#: project/forms/admin.py:11 project/templates/layout.html:337
#: project/views/root.py:55
msgid "Terms of service"
msgstr ""
#: project/forms/admin.py:12 project/templates/layout.html:339
#: project/forms/admin.py:12 project/templates/layout.html:342
#: project/views/root.py:67
msgid "Legal notice"
msgstr ""
#: project/forms/admin.py:13 project/templates/_macros.html:1461
#: project/templates/layout.html:343
#: project/forms/admin.py:13 project/templates/_macros.html:1465
#: project/templates/layout.html:346
#: project/templates/widget/event_suggestion/create.html:204
#: project/views/admin_unit.py:83 project/views/root.py:75
msgid "Contact"
msgstr ""
#: project/forms/admin.py:14 project/templates/layout.html:347
#: project/forms/admin.py:14 project/templates/layout.html:350
#: project/views/root.py:83
msgid "Privacy"
msgstr ""
@ -260,7 +260,7 @@ msgstr ""
#: project/forms/admin_unit_member.py:30 project/forms/event.py:107
#: project/forms/event_suggestion.py:38 project/forms/organizer.py:33
#: project/forms/user.py:18 project/forms/user.py:23
#: project/templates/_macros.html:246 project/templates/_macros.html:1557
#: project/templates/_macros.html:246 project/templates/_macros.html:1561
#: project/templates/admin/admin.html:27 project/templates/admin/email.html:4
#: project/templates/admin/email.html:66 project/templates/admin/users.html:19
#: project/templates/manage/organizers.html:21
@ -365,9 +365,9 @@ msgstr ""
msgid "Street"
msgstr ""
#: project/forms/admin_unit.py:18 project/forms/event.py:453
#: project/forms/admin_unit.py:18 project/forms/event.py:461
#: project/forms/event_date.py:52 project/forms/event_place.py:16
#: project/forms/organizer.py:16
#: project/forms/organizer.py:16 project/forms/planning.py:44
msgid "Postal code"
msgstr ""
@ -407,7 +407,7 @@ msgstr ""
msgid "The short name is used to create a unique identifier for your events"
msgstr ""
#: project/forms/admin_unit.py:48 project/templates/_macros.html:1599
#: project/forms/admin_unit.py:48 project/templates/_macros.html:1603
msgid "Short name must contain only letters numbers or underscore"
msgstr ""
@ -428,13 +428,13 @@ msgstr ""
#: project/forms/admin_unit.py:61 project/forms/event.py:108
#: project/forms/event_suggestion.py:31 project/forms/organizer.py:34
#: project/templates/_macros.html:305
#: project/templates/_macros.html:309
#: project/templates/manage/organizers.html:20
msgid "Phone"
msgstr ""
#: project/forms/admin_unit.py:62 project/forms/event.py:109
#: project/forms/organizer.py:35 project/templates/_macros.html:313
#: project/forms/organizer.py:35 project/templates/_macros.html:317
msgid "Fax"
msgstr ""
@ -519,7 +519,7 @@ msgstr ""
msgid "Cancel deletion"
msgstr ""
#: project/forms/admin_unit.py:158 project/templates/layout.html:305
#: project/forms/admin_unit.py:158 project/templates/layout.html:308
#: project/templates/manage/delete_membership.html:6
msgid "Leave organization"
msgstr ""
@ -653,20 +653,20 @@ msgid ""
"days."
msgstr ""
#: project/forms/event.py:50 project/templates/planing/list.html:75
#: project/forms/event.py:50
msgid "All-day"
msgstr ""
#: project/forms/event.py:54 project/templates/_macros.html:1769
#: project/forms/event.py:54 project/templates/_macros.html:1773
#: project/templates/widget/event_suggestion/create.html:240
msgid "Recurring event"
msgstr ""
#: project/forms/event.py:61 project/templates/_macros.html:1318
#: project/forms/event.py:61 project/templates/_macros.html:1322
msgid "The start must be before the end."
msgstr ""
#: project/forms/event.py:67 project/templates/_macros.html:1335
#: project/forms/event.py:67 project/templates/_macros.html:1339
msgid "An event can last a maximum of 14 days."
msgstr ""
@ -747,7 +747,7 @@ msgid "If the participants needs to register for the event."
msgstr ""
#: project/forms/event.py:170 project/templates/_macros.html:260
#: project/templates/layout.html:115
#: project/templates/layout.html:118
msgid "Booked up"
msgstr ""
@ -803,11 +803,11 @@ msgstr ""
msgid "EventAttendanceMode.offline"
msgstr ""
#: project/forms/event.py:217 project/templates/layout.html:103
#: project/forms/event.py:217 project/templates/layout.html:106
msgid "EventAttendanceMode.online"
msgstr ""
#: project/forms/event.py:219 project/templates/layout.html:106
#: project/forms/event.py:219 project/templates/layout.html:109
msgid "EventAttendanceMode.mixed"
msgstr ""
@ -830,8 +830,8 @@ msgid ""
" course it works without it."
msgstr ""
#: project/forms/event.py:242 project/templates/_macros.html:418
#: project/templates/_macros.html:581
#: project/forms/event.py:242 project/templates/_macros.html:422
#: project/templates/_macros.html:585
msgid "Previous start date"
msgstr ""
@ -876,9 +876,9 @@ msgid "Invalid co-organizer."
msgstr ""
#: project/forms/event.py:286 project/forms/event.py:295
#: project/forms/event.py:368 project/forms/event.py:442
#: project/forms/event_suggestion.py:50 project/templates/_macros.html:458
#: project/templates/_macros.html:624 project/templates/event/create.html:288
#: project/forms/event.py:373 project/forms/event.py:450
#: project/forms/event_suggestion.py:50 project/templates/_macros.html:462
#: project/templates/_macros.html:628 project/templates/event/create.html:288
#: project/templates/event/update.html:170
#: project/templates/event_place/create.html:31
#: project/templates/event_place/delete.html:13
@ -896,9 +896,9 @@ msgid "Enter new place"
msgstr ""
#: project/forms/event.py:302 project/forms/event.py:311
#: project/forms/event.py:376 project/forms/event.py:439
#: project/forms/event.py:381 project/forms/event.py:447
#: project/forms/event_date.py:40 project/forms/event_suggestion.py:60
#: project/templates/_macros.html:495 project/templates/_macros.html:667
#: project/templates/_macros.html:499 project/templates/_macros.html:671
#: project/templates/event/create.html:257
#: project/templates/event/update.html:160
#: project/templates/manage/events.html:104
@ -921,110 +921,118 @@ msgid "Save as draft"
msgstr ""
#: project/forms/event.py:318
msgid "Save as planned"
msgstr ""
#: project/forms/event.py:319
msgid "Publish event"
msgstr ""
#: project/forms/event.py:350
#: project/forms/event.py:355
msgid "Select existing place or enter new place"
msgstr ""
#: project/forms/event.py:358
#: project/forms/event.py:363
msgid "Select existing organizer or enter new organizer"
msgstr ""
#: project/forms/event.py:371
#: project/forms/event.py:376
msgid ""
"Choose where the event takes place. You can add and modify places at "
"Organization > Places."
msgstr ""
#: project/forms/event.py:379
#: project/forms/event.py:384
msgid ""
"Select the organizer. You can add and modify organizers at Organization >"
" Organizers."
msgstr ""
#: project/forms/event.py:385 project/templates/event/update.html:149
#: project/forms/event.py:390 project/templates/event/update.html:149
#: project/templates/oauth2_token/list.html:21
msgid "Status"
msgstr ""
#: project/forms/event.py:388
#: project/forms/event.py:393
msgid "EventStatus.scheduled"
msgstr ""
#: project/forms/event.py:389 project/templates/layout.html:69
#: project/templates/layout.html:84
#: project/forms/event.py:394 project/templates/layout.html:72
#: project/templates/layout.html:87
msgid "EventStatus.cancelled"
msgstr ""
#: project/forms/event.py:390 project/templates/layout.html:72
#: project/templates/layout.html:87
#: project/forms/event.py:395 project/templates/layout.html:75
#: project/templates/layout.html:90
msgid "EventStatus.movedOnline"
msgstr ""
#: project/forms/event.py:391 project/templates/layout.html:75
#: project/templates/layout.html:90
#: project/forms/event.py:396 project/templates/layout.html:78
#: project/templates/layout.html:93
msgid "EventStatus.postponed"
msgstr ""
#: project/forms/event.py:392 project/templates/layout.html:78
#: project/templates/layout.html:93
#: project/forms/event.py:397 project/templates/layout.html:81
#: project/templates/layout.html:96
msgid "EventStatus.rescheduled"
msgstr ""
#: project/forms/event.py:394
#: project/forms/event.py:399
msgid "Select the status of the event."
msgstr ""
#: project/forms/event.py:398
#: project/forms/event.py:403
msgid "Public status"
msgstr ""
#: project/forms/event.py:401
#: project/forms/event.py:406
msgid "PublicStatus.published"
msgstr ""
#: project/forms/event.py:402 project/templates/_macros.html:266
#: project/forms/event.py:407 project/templates/_macros.html:269
msgid "PublicStatus.planned"
msgstr ""
#: project/forms/event.py:408 project/templates/_macros.html:267
msgid "PublicStatus.draft"
msgstr ""
#: project/forms/event.py:404
msgid "Select the public status of the event."
#: project/forms/event.py:410 project/templates/event/create.html:371
msgid "Planned events appear in the scheduling view, but not on public calendars."
msgstr ""
#: project/forms/event.py:407 project/templates/event/update.html:5
#: project/forms/event.py:415 project/templates/event/update.html:5
#: project/templates/event/update.html:117
msgid "Update event"
msgstr ""
#: project/forms/event.py:423 project/templates/_macros.html:1275
#: project/forms/event.py:431 project/templates/_macros.html:1279
#: project/templates/event/actions.html:66
#: project/templates/event/delete.html:6
msgid "Delete event"
msgstr ""
#: project/forms/event.py:430 project/forms/event_date.py:14
#: project/forms/planing.py:14
#: project/forms/event.py:438 project/forms/event_date.py:14
#: project/forms/planning.py:21
msgid "From"
msgstr ""
#: project/forms/event.py:432 project/forms/event_date.py:16
#: project/forms/planing.py:16
#: project/forms/event.py:440 project/forms/event_date.py:16
#: project/forms/planning.py:22
msgid "to"
msgstr ""
#: project/forms/event.py:434 project/forms/event_date.py:18
#: project/forms/event.py:442 project/forms/event_date.py:18
msgid "Keyword"
msgstr ""
#: project/forms/event.py:436 project/forms/event_date.py:20
#: project/forms/planing.py:19 project/templates/_macros.html:391
#: project/forms/event.py:444 project/forms/event_date.py:20
#: project/forms/planning.py:24 project/templates/_macros.html:395
msgid "Category"
msgstr ""
#: project/forms/event.py:446 project/forms/event_date.py:26
#: project/forms/planing.py:22 project/templates/_macros.html:320
#: project/forms/event.py:454 project/forms/event_date.py:26
#: project/forms/planning.py:27 project/templates/_macros.html:324
#: project/templates/admin_unit/create.html:39
#: project/templates/admin_unit/update.html:47
#: project/templates/event_place/create.html:40
@ -1036,28 +1044,29 @@ msgstr ""
msgid "Location"
msgstr ""
#: project/forms/event.py:448 project/forms/event_date.py:28
#: project/forms/planing.py:24
#: project/forms/event.py:456 project/forms/event_date.py:28
#: project/forms/planning.py:29
msgid "Distance"
msgstr ""
#: project/forms/event.py:455 project/forms/event_date.py:49
#: project/forms/event.py:463 project/forms/event_date.py:49
#: project/forms/planning.py:41
msgid "Exclude recurring events"
msgstr ""
#: project/forms/event.py:459 project/forms/event_date.py:54
#: project/forms/event.py:467 project/forms/event_date.py:54
msgid "Find events"
msgstr ""
#: project/forms/event_date.py:35 project/forms/reference.py:11
#: project/forms/reference_request.py:16 project/templates/_macros.html:511
#: project/templates/_macros.html:684
#: project/forms/reference_request.py:16 project/templates/_macros.html:515
#: project/templates/_macros.html:688
#: project/templates/admin/delete_admin_unit.html:13
#: project/templates/admin_unit/cancel_deletion.html:13
#: project/templates/admin_unit/create.html:28
#: project/templates/admin_unit/request_deletion.html:15
#: project/templates/admin_unit/update.html:36
#: project/templates/layout.html:257
#: project/templates/layout.html:260
#: project/templates/manage/delete_membership.html:13
#: project/templates/verification_request/delete.html:13
#: project/templates/verification_request/review.html:28
@ -1068,7 +1077,7 @@ msgstr ""
msgid "Show unreferenced events only"
msgstr ""
#: project/forms/event_date.py:63 project/forms/planing.py:36
#: project/forms/event_date.py:63
#: project/templates/widget/event_date/list.html:82
msgid "Find"
msgstr ""
@ -1193,10 +1202,18 @@ msgstr ""
msgid "Delete organizer"
msgstr ""
#: project/forms/planing.py:30
#: project/forms/planning.py:35
msgid "Weekdays"
msgstr ""
#: project/forms/planning.py:46
msgid "Min. expected number of participants"
msgstr ""
#: project/forms/planning.py:50 project/templates/planning/list.html:98
msgid "Refresh"
msgstr ""
#: project/forms/reference.py:22
msgid "Save reference"
msgstr ""
@ -1222,7 +1239,7 @@ msgid "Delete request"
msgstr ""
#: project/forms/reference_request.py:28
#: project/forms/verification_request.py:24 project/templates/_macros.html:1473
#: project/forms/verification_request.py:24 project/templates/_macros.html:1477
#: project/templates/event_suggestion/review_status.html:18
#: project/templates/reference_request/review_status.html:12
#: project/templates/verification_request/review_status.html:4
@ -1365,31 +1382,31 @@ msgstr ""
msgid "Link"
msgstr ""
#: project/templates/_macros.html:299
#: project/templates/_macros.html:303
msgid "Verified"
msgstr ""
#: project/templates/_macros.html:368
#: project/templates/_macros.html:372
#, python-format
msgid "Created at %(created_at)s by %(created_by)s."
msgstr ""
#: project/templates/_macros.html:370
#: project/templates/_macros.html:374
#, python-format
msgid "Created at %(created_at)s."
msgstr ""
#: project/templates/_macros.html:375
#: project/templates/_macros.html:379
#, python-format
msgid "Last updated at %(updated_at)s by %(updated_by)s."
msgstr ""
#: project/templates/_macros.html:377
#: project/templates/_macros.html:381
#, python-format
msgid "Last updated at %(updated_at)s."
msgstr ""
#: project/templates/_macros.html:407 project/templates/_macros.html:577
#: project/templates/_macros.html:411 project/templates/_macros.html:581
#: project/templates/event/actions.html:25
#: project/templates/event/create.html:234
#: project/templates/event/update.html:126
@ -1398,44 +1415,44 @@ msgstr ""
msgid "Event"
msgstr ""
#: project/templates/_macros.html:413 project/templates/_macros.html:999
#: project/templates/_macros.html:417 project/templates/_macros.html:1003
msgid "Date"
msgstr ""
#: project/templates/_macros.html:440 project/templates/_macros.html:599
#: project/templates/_macros.html:1542 project/templates/event/actions.html:51
#: project/templates/_macros.html:444 project/templates/_macros.html:603
#: project/templates/_macros.html:1546 project/templates/event/actions.html:51
msgid "Share"
msgstr ""
#: project/templates/_macros.html:444 project/templates/_macros.html:603
#: project/templates/_macros.html:1572
#: project/templates/_macros.html:448 project/templates/_macros.html:607
#: project/templates/_macros.html:1576
msgid "Add to calendar"
msgstr ""
#: project/templates/_macros.html:452 project/templates/_macros.html:617
#: project/templates/_macros.html:456 project/templates/_macros.html:621
#: project/templates/event/report.html:4
msgid "Report event"
msgstr ""
#: project/templates/_macros.html:479 project/templates/_macros.html:650
#: project/templates/_macros.html:483 project/templates/_macros.html:654
msgid "Show directions"
msgstr ""
#: project/templates/_macros.html:484 project/templates/_macros.html:642
#: project/templates/_macros.html:488 project/templates/_macros.html:646
msgid "The event takes place online."
msgstr ""
#: project/templates/_macros.html:486 project/templates/_macros.html:644
#: project/templates/_macros.html:490 project/templates/_macros.html:648
msgid "The event takes place both offline and online."
msgstr ""
#: project/templates/_macros.html:607 project/templates/layout.html:183
#: project/templates/_macros.html:611 project/templates/layout.html:186
#: project/templates/user/favorite_events.html:4
msgid "Favorite events"
msgstr ""
#: project/templates/_macros.html:610 project/templates/_macros.html:653
#: project/templates/_macros.html:785
#: project/templates/_macros.html:614 project/templates/_macros.html:657
#: project/templates/_macros.html:789
#: project/templates/admin/admin_units.html:36
#: project/templates/admin/users.html:36
#: project/templates/manage/events.html:118
@ -1448,11 +1465,11 @@ msgstr ""
msgid "Edit"
msgstr ""
#: project/templates/_macros.html:711
#: project/templates/_macros.html:715
msgid "Referenced by"
msgstr ""
#: project/templates/_macros.html:723 project/templates/_macros.html:1285
#: project/templates/_macros.html:727 project/templates/_macros.html:1289
#: project/templates/event/actions.html:38
#: project/templates/event_date/list.html:251
#: project/templates/manage/events.html:125
@ -1460,39 +1477,39 @@ msgstr ""
msgid "Reference event"
msgstr ""
#: project/templates/_macros.html:732
#: project/templates/_macros.html:736
#: project/templates/manage/reference_requests_incoming.html:5
#: project/templates/manage/reference_requests_outgoing.html:5
msgid "Reference requests"
msgstr ""
#: project/templates/_macros.html:743 project/templates/_macros.html:1282
#: project/templates/_macros.html:747 project/templates/_macros.html:1286
#: project/templates/event/actions.html:32
#: project/templates/manage/events.html:123
msgid "Request reference"
msgstr ""
#: project/templates/_macros.html:751 project/templates/event_date/list.html:6
#: project/templates/_macros.html:755 project/templates/event_date/list.html:6
#: project/templates/event_date/list.html:461
#: project/templates/reference_request/review.html:32
msgid "Event Dates"
msgstr ""
#: project/templates/_macros.html:849
#: project/templates/_macros.html:853
msgid "Search location on Google"
msgstr ""
#: project/templates/_macros.html:916
#: project/templates/_macros.html:920
#, python-format
msgid "%(count)d event dates"
msgstr ""
#: project/templates/_macros.html:939 project/templates/_macros.html:941
#: project/templates/_macros.html:943 project/templates/_macros.html:945
#: project/templates/event_date/list.html:510
msgid "First"
msgstr ""
#: project/templates/_macros.html:944 project/templates/_macros.html:946
#: project/templates/_macros.html:948 project/templates/_macros.html:950
#: project/templates/event_date/list.html:511
#: project/templates/widget/event_suggestion/create.html:193
#: project/templates/widget/event_suggestion/create.html:218
@ -1503,12 +1520,12 @@ msgstr ""
msgid "Previous"
msgstr ""
#: project/templates/_macros.html:948
#: project/templates/_macros.html:952
#, python-format
msgid "Page %(page)d of %(pages)d (%(total)d total)"
msgstr ""
#: project/templates/_macros.html:950 project/templates/_macros.html:952
#: project/templates/_macros.html:954 project/templates/_macros.html:956
#: project/templates/event_date/list.html:513
#: project/templates/widget/event_suggestion/create.html:194
#: project/templates/widget/event_suggestion/create.html:219
@ -1518,98 +1535,98 @@ msgstr ""
msgid "Next"
msgstr ""
#: project/templates/_macros.html:955 project/templates/_macros.html:957
#: project/templates/_macros.html:959 project/templates/_macros.html:961
#: project/templates/event_date/list.html:514
msgid "Last"
msgstr ""
#: project/templates/_macros.html:1022
#: project/templates/_macros.html:1026
msgid "Radius"
msgstr ""
#: project/templates/_macros.html:1204
#: project/templates/_macros.html:1208
msgid "Edit image"
msgstr ""
#: project/templates/_macros.html:1225
#: project/templates/_macros.html:1229 project/templates/planning/list.html:97
msgid "Close"
msgstr ""
#: project/templates/_macros.html:1226
#: project/templates/_macros.html:1230
msgid "Okay"
msgstr ""
#: project/templates/_macros.html:1238
#: project/templates/_macros.html:1242
msgid "Choose image file"
msgstr ""
#: project/templates/_macros.html:1274 project/templates/event/actions.html:65
#: project/templates/_macros.html:1278 project/templates/event/actions.html:65
#: project/templates/event/delete.html:12
msgid "Edit event"
msgstr ""
#: project/templates/_macros.html:1278 project/templates/event/actions.html:58
#: project/templates/_macros.html:1282 project/templates/event/actions.html:58
msgid "Duplicate event"
msgstr ""
#: project/templates/_macros.html:1289 project/templates/event/actions.html:44
#: project/templates/_macros.html:1293 project/templates/event/actions.html:44
#: project/templates/manage/events.html:129
msgid "Add to list"
msgstr ""
#: project/templates/_macros.html:1292 project/templates/manage/events.html:132
#: project/templates/_macros.html:1296 project/templates/manage/events.html:132
msgid "More"
msgstr ""
#: project/templates/_macros.html:1339
#: project/templates/_macros.html:1343
msgid "Please enter a valid time, between 00:00 and 23:59."
msgstr ""
#: project/templates/_macros.html:1367
#: project/templates/_macros.html:1371
#, python-format
msgid "Just use %(term)s"
msgstr ""
#: project/templates/_macros.html:1433
#: project/templates/_macros.html:1437
msgid "Event suggestion"
msgstr ""
#: project/templates/_macros.html:1551
#: project/templates/_macros.html:1555
msgid "Link copied"
msgstr ""
#: project/templates/_macros.html:1551
#: project/templates/_macros.html:1555
msgid "Copy link"
msgstr ""
#: project/templates/_macros.html:1581
#: project/templates/_macros.html:1585
msgid "Google calendar"
msgstr ""
#: project/templates/_macros.html:1583
#: project/templates/_macros.html:1587
msgid "Apple calendar"
msgstr ""
#: project/templates/_macros.html:1584
#: project/templates/_macros.html:1588
msgid "Yahoo calendar"
msgstr ""
#: project/templates/_macros.html:1585
#: project/templates/_macros.html:1589
msgid "Other calendar"
msgstr ""
#: project/templates/_macros.html:1770
#: project/templates/_macros.html:1774
msgid "Remove event date"
msgstr ""
#: project/templates/_macros.html:1803 project/templates/event/create.html:180
#: project/templates/_macros.html:1807 project/templates/event/create.html:180
#: project/templates/event/update.html:103
#: project/templates/event_date/list.html:446
#: project/templates/widget/event_suggestion/create.html:129
msgid "Enter organizer"
msgstr ""
#: project/templates/_macros.html:1831
#: project/templates/_macros.html:1835
msgid "Enter list name"
msgstr ""
@ -1617,10 +1634,11 @@ msgstr ""
msgid "Manage"
msgstr ""
#: project/templates/home.html:37 project/templates/layout.html:173
#: project/templates/home.html:37 project/templates/layout.html:176
#: project/templates/manage/admin_units.html:28
#: project/templates/manage/verification_requests_outgoing.html:13
#: project/templates/manage/verification_requests_outgoing_create_select.html:13
#: project/templates/planning/list.html:68
#: project/templates/security/login_user.html:21
#: project/templates/security/register_user.html:43
msgid "Docs"
@ -1630,7 +1648,7 @@ msgstr ""
msgid "Features"
msgstr ""
#: project/templates/layout.html:167 project/templates/layout.html:215
#: project/templates/layout.html:170 project/templates/layout.html:218
#: project/templates/manage/events.html:6
#: project/templates/manage/events.html:54
#: project/templates/manage/events_vue.html:4
@ -1640,18 +1658,18 @@ msgstr ""
#: project/templates/admin/admin.html:19
#: project/templates/admin/admin_units.html:4
#: project/templates/admin/admin_units.html:11
#: project/templates/layout.html:168 project/templates/layout.html:181
#: project/templates/layout.html:171 project/templates/layout.html:184
#: project/templates/manage/admin_units.html:3
#: project/templates/manage/admin_units.html:26
#: project/templates/organization/main.html:4
msgid "Organizations"
msgstr ""
#: project/templates/layout.html:169
msgid "Planing"
#: project/templates/layout.html:172
msgid "Planning"
msgstr ""
#: project/templates/layout.html:182 project/templates/layout.html:294
#: project/templates/layout.html:185 project/templates/layout.html:297
#: project/templates/oauth2_client/list.html:10
#: project/templates/oauth2_client/read.html:10
#: project/templates/oauth2_token/list.html:10 project/templates/profile.html:4
@ -1664,100 +1682,100 @@ msgstr ""
#: project/templates/admin/email.html:65
#: project/templates/admin/newsletter.html:92
#: project/templates/admin/settings.html:10
#: project/templates/admin/users.html:10 project/templates/layout.html:186
#: project/templates/admin/users.html:10 project/templates/layout.html:189
msgid "Admin"
msgstr ""
#: project/templates/layout.html:190
#: project/templates/layout.html:193
msgid "Logout"
msgstr ""
#: project/templates/layout.html:221
#: project/templates/layout.html:224
msgid "Show events"
msgstr ""
#: project/templates/event/create.html:5
#: project/templates/event/create.html:225 project/templates/layout.html:222
#: project/templates/event/create.html:225 project/templates/layout.html:225
#: project/templates/manage/events.html:55
#: project/templates/manage/organizers.html:38
msgid "Create event"
msgstr ""
#: project/templates/layout.html:223
#: project/templates/layout.html:226
msgid "Import event"
msgstr ""
#: project/templates/layout.html:225
#: project/templates/layout.html:228
#: project/templates/manage/event_lists.html:4
msgid "Event lists"
msgstr ""
#: project/templates/layout.html:228
#: project/templates/layout.html:231
msgid "Review suggestions"
msgstr ""
#: project/templates/layout.html:238
#: project/templates/layout.html:241
#: project/templates/manage/references_incoming.html:5
#: project/templates/manage/references_outgoing.html:5
msgid "References"
msgstr ""
#: project/templates/layout.html:244
#: project/templates/layout.html:247
#: project/templates/manage/references_incoming.html:9
msgid "Incoming references"
msgstr ""
#: project/templates/layout.html:245
#: project/templates/layout.html:248
#: project/templates/manage/references_outgoing.html:9
msgid "Outgoing references"
msgstr ""
#: project/templates/layout.html:247
#: project/templates/layout.html:250
#: project/templates/manage/reference_requests_incoming.html:9
msgid "Incoming reference requests"
msgstr ""
#: project/templates/layout.html:252
#: project/templates/layout.html:255
#: project/templates/manage/reference_requests_outgoing.html:9
msgid "Outgoing reference requests"
msgstr ""
#: project/templates/layout.html:264
#: project/templates/layout.html:267
#: project/templates/manage/verification_requests_outgoing.html:5
#: project/templates/manage/verification_requests_outgoing.html:10
msgid "Outgoing verification requests"
msgstr ""
#: project/templates/layout.html:268 project/templates/manage/organizers.html:5
#: project/templates/layout.html:271 project/templates/manage/organizers.html:5
#: project/templates/manage/organizers.html:10
#: project/templates/organizer/main.html:4
msgid "Organizers"
msgstr ""
#: project/templates/event_place/list.html:3
#: project/templates/event_place/list.html:7 project/templates/layout.html:269
#: project/templates/event_place/list.html:7 project/templates/layout.html:272
#: project/templates/manage/places.html:5
#: project/templates/manage/places.html:10
msgid "Places"
msgstr ""
#: project/templates/layout.html:271 project/templates/manage/members.html:5
#: project/templates/layout.html:274 project/templates/manage/members.html:5
#: project/templates/manage/members.html:28
#: project/templates/verification_request/review.html:54
msgid "Members"
msgstr ""
#: project/templates/layout.html:272 project/templates/manage/relations.html:4
#: project/templates/layout.html:275 project/templates/manage/relations.html:4
msgid "Relations"
msgstr ""
#: project/templates/layout.html:276
#: project/templates/layout.html:279
#: project/templates/manage/verification_requests_incoming.html:5
#: project/templates/manage/verification_requests_incoming.html:9
msgid "Incoming verification requests"
msgstr ""
#: project/templates/layout.html:284
#: project/templates/layout.html:287
#: project/templates/manage/admin_units.html:17
#: project/templates/manage/organization_invitations.html:4
#: project/templates/user/organization_invitations.html:4
@ -1769,33 +1787,33 @@ msgstr ""
#: project/templates/admin/settings.html:11
#: project/templates/admin_unit/update.html:6
#: project/templates/admin_unit/update.html:30
#: project/templates/layout.html:288 project/templates/manage/widgets.html:11
#: project/templates/layout.html:291 project/templates/manage/widgets.html:11
#: project/templates/manage/widgets.html:15 project/templates/profile.html:32
msgid "Settings"
msgstr ""
#: project/templates/layout.html:289 project/templates/manage/export.html:3
#: project/templates/layout.html:292 project/templates/manage/export.html:3
#: project/templates/manage/export.html:63
msgid "Export"
msgstr ""
#: project/templates/layout.html:291
#: project/templates/layout.html:294
#: project/templates/manage/custom_widgets.html:13
msgid "Custom widgets"
msgstr ""
#: project/templates/layout.html:292 project/templates/manage/reviews.html:10
#: project/templates/layout.html:295 project/templates/manage/reviews.html:10
#: project/templates/manage/widgets.html:5
#: project/templates/manage/widgets.html:9
msgid "Widgets"
msgstr ""
#: project/templates/layout.html:304
#: project/templates/layout.html:307
msgid "Switch organization"
msgstr ""
#: project/templates/developer/read.html:4
#: project/templates/developer/read.html:8 project/templates/layout.html:351
#: project/templates/developer/read.html:8 project/templates/layout.html:354
#: project/templates/profile.html:45
msgid "Developer"
msgstr ""
@ -2400,9 +2418,13 @@ msgstr ""
msgid "Revoke"
msgstr ""
#: project/templates/planing/list.html:5
#: project/templates/planing/list.html:105
msgid "Event Planing"
#: project/templates/planning/list.html:5
#: project/templates/planning/list.html:66
msgid "Event Planning"
msgstr ""
#: project/templates/planning/list.html:76
msgid "Filters"
msgstr ""
#: project/templates/reference/read.html:4
@ -2616,19 +2638,23 @@ msgstr ""
msgid "Draft successfully saved"
msgstr ""
#: project/views/event.py:226
#: project/views/event.py:185
msgid "Event successfully planned"
msgstr ""
#: project/views/event.py:228
msgid "Event successfully updated"
msgstr ""
#: project/views/event.py:252
#: project/views/event.py:254
msgid "Event successfully deleted"
msgstr ""
#: project/views/event.py:417
#: project/views/event.py:419
msgid "Referenced event changed"
msgstr ""
#: project/views/event.py:440
#: project/views/event.py:442
msgid "New event report"
msgstr ""

View File

@ -283,7 +283,7 @@ from project.views import (
oauth2_token,
organization,
organizer,
planing,
planning,
reference,
reference_request,
reference_request_review,

View File

@ -201,6 +201,16 @@ def can_create_admin_unit():
return any(admin_unit.can_create_other for admin_unit in admin_units)
def can_use_planning():
if not current_user.is_authenticated:
return False
if has_current_user_role("admin"): # pragma: no cover
return True
return current_user.is_member_of_verified_admin_unit
def can_verify_admin_unit():
if not current_user.is_authenticated: # pragma: no cover
return False
@ -216,6 +226,13 @@ def can_read_event(event: Event) -> bool:
if event.public_status == PublicStatus.published and event.admin_unit.is_verified:
return True
if (
event.public_status == PublicStatus.planned
and event.admin_unit.is_verified
and can_use_planning()
):
return True
return has_access(event.admin_unit, "event:read")

View File

@ -3,7 +3,7 @@ from flask_apispec import doc, marshal_with, use_kwargs
from sqlalchemy import and_
from sqlalchemy.orm import defaultload, lazyload
from project.access import login_api_user
from project.access import can_use_planning, login_api_user
from project.api import add_api_resource
from project.api.event.resources import api_can_read_event_or_401
from project.api.event_date.schemas import (
@ -64,6 +64,7 @@ class EventDateSearchResource(BaseResource):
login_api_user()
params = EventSearchParams()
params.load_from_request()
params.can_read_planned_events = can_use_planning()
if "not_referenced" in request.args:
admin_unit = get_current_admin_unit_for_api()

View File

@ -315,6 +315,7 @@ class CreateEventForm(BaseEventForm):
new_organizer = FormField(OrganizerForm, default=lambda: EventOrganizer())
submit_draft = SubmitField(lazy_gettext("Save as draft"))
submit_planned = SubmitField(lazy_gettext("Save as planned"))
submit = SubmitField(lazy_gettext("Publish event"))
def populate_obj(self, obj):
@ -338,7 +339,11 @@ class CreateEventForm(BaseEventForm):
field.populate_obj(obj, name)
obj.public_status = (
PublicStatus.published if self.submit.data else PublicStatus.draft
PublicStatus.published
if self.submit.data
else PublicStatus.planned
if self.submit_planned.data
else PublicStatus.draft
)
def validate(self, extra_validators=None):
@ -399,9 +404,12 @@ class UpdateEventForm(BaseEventForm):
coerce=int,
choices=[
(int(PublicStatus.published), lazy_gettext("PublicStatus.published")),
(int(PublicStatus.planned), lazy_gettext("PublicStatus.planned")),
(int(PublicStatus.draft), lazy_gettext("PublicStatus.draft")),
],
description=lazy_gettext("Select the public status of the event."),
description=lazy_gettext(
"Planned events appear in the scheduling view, but not on public calendars."
),
)
submit = SubmitField(lazy_gettext("Update event"))

View File

@ -1,36 +0,0 @@
from flask_babel import lazy_gettext
from flask_wtf import FlaskForm
from wtforms import HiddenField, SelectField, SubmitField
from wtforms.validators import Optional
from project.forms.common import distance_choices, weekday_choices
from project.forms.widgets import CustomDateField, MultiCheckboxField
class PlaningForm(FlaskForm):
class Meta:
csrf = False
date_from = CustomDateField(lazy_gettext("From"), validators=[Optional()])
date_to = CustomDateField(
lazy_gettext("to"), set_end_of_day=True, validators=[Optional()]
)
category_id = SelectField(
lazy_gettext("Category"), validators=[Optional()], coerce=int
)
coordinate = HiddenField(validators=[Optional()])
location = SelectField(lazy_gettext("Location"), validators=[Optional()])
distance = SelectField(
lazy_gettext("Distance"),
validators=[Optional()],
coerce=int,
choices=distance_choices,
)
weekday = MultiCheckboxField(
lazy_gettext("Weekdays"),
validators=[Optional()],
coerce=int,
choices=weekday_choices,
)
submit = SubmitField(lazy_gettext("Find"))

50
project/forms/planning.py Normal file
View File

@ -0,0 +1,50 @@
from flask_babel import lazy_gettext
from flask_wtf import FlaskForm
from wtforms import (
BooleanField,
HiddenField,
IntegerField,
SelectField,
StringField,
SubmitField,
)
from wtforms.validators import Optional
from project.forms.common import distance_choices, weekday_choices
from project.forms.widgets import MultiCheckboxField
class PlanningForm(FlaskForm):
class Meta:
csrf = False
date_from = HiddenField(lazy_gettext("From"), validators=[Optional()])
date_to = HiddenField(lazy_gettext("to"), validators=[Optional()])
category_id = MultiCheckboxField(
lazy_gettext("Category"), validators=[Optional()], coerce=int
)
coordinate = HiddenField(validators=[Optional()])
location = SelectField(lazy_gettext("Location"), validators=[Optional()])
distance = SelectField(
lazy_gettext("Distance"),
validators=[Optional()],
coerce=int,
choices=distance_choices,
)
weekday = MultiCheckboxField(
lazy_gettext("Weekdays"),
validators=[Optional()],
coerce=int,
choices=weekday_choices,
)
exclude_recurring = BooleanField(
lazy_gettext("Exclude recurring events"),
validators=[Optional()],
)
postal_code = StringField(lazy_gettext("Postal code"), validators=[Optional()])
expected_participants_min = IntegerField(
lazy_gettext("Min. expected number of participants"),
validators=[Optional()],
)
submit = SubmitField(lazy_gettext("Refresh"))

View File

@ -26,6 +26,7 @@ class EventStatus(IntEnum):
class PublicStatus(IntEnum):
draft = 1
published = 2
planned = 3
class Event(db.Model, TrackableMixin, EventMixin):

View File

@ -66,6 +66,15 @@ class User(db.Model, UserMixin):
created_at = deferred(Column(DateTime, default=datetime.datetime.utcnow))
deletion_requested_at = deferred(Column(DateTime, nullable=True))
@property
def is_member_of_verified_admin_unit(self):
if not self.adminunitmembers: # pragma: no cover
return False
return any(
m.adminunit and m.adminunit.is_verified for m in self.adminunitmembers
)
def get_user_id(self):
return self.id

View File

@ -88,6 +88,35 @@ def fill_event_filter(event_filter, params: EventSearchParams):
stati = [params.status]
event_filter = and_(event_filter, Event.status.in_(stati))
if params.public_status:
if type(params.public_status) is list:
public_stati = params.public_status
else: # pragma: no cover
public_stati = [params.public_status]
else:
public_stati = [
PublicStatus.published,
PublicStatus.draft,
]
if not params.can_read_private_events and PublicStatus.draft in public_stati:
public_stati.remove(PublicStatus.draft)
if (
not params.can_read_private_events
and not params.can_read_planned_events
and PublicStatus.planned in public_stati
):
public_stati.remove(PublicStatus.planned)
if not params.can_read_private_events or not params.admin_unit_id:
event_filter = and_(
event_filter,
AdminUnit.is_verified,
)
event_filter = and_(event_filter, Event.public_status.in_(public_stati))
if params.event_list_id:
if type(params.event_list_id) is list:
event_list_ids = params.event_list_id
@ -154,6 +183,12 @@ def fill_event_filter(event_filter, params: EventSearchParams):
~Event.is_recurring,
)
if params.expected_participants_min:
event_filter = and_(
event_filter,
Event.expected_participants >= params.expected_participants_min,
)
return event_filter
@ -178,19 +213,6 @@ def get_event_dates_query(params: EventSearchParams):
),
)
if not params.can_read_private_events:
event_filter = and_(
event_filter,
Event.public_status == PublicStatus.published,
AdminUnit.is_verified,
)
else:
event_filter = and_(
event_filter,
Event.public_status == PublicStatus.published,
AdminUnit.is_verified,
)
if params.date_from:
date_filter = EventDate.start >= params.date_from
@ -340,19 +362,6 @@ def get_events_query(params: EventSearchParams):
if params.admin_unit_id:
event_filter = and_(event_filter, Event.admin_unit_id == params.admin_unit_id)
if not params.can_read_private_events:
event_filter = and_(
event_filter,
Event.public_status == PublicStatus.published,
AdminUnit.is_verified,
)
else:
event_filter = and_(
event_filter,
Event.public_status == PublicStatus.published,
AdminUnit.is_verified,
)
if params.date_from:
date_filter = EventDate.start >= params.date_from

View File

@ -18,6 +18,7 @@ class EventSearchParams(object):
self._coordinate = None
self.admin_unit_id = None
self.can_read_private_events = None
self.can_read_planned_events = None
self.keyword = None
self.latitude = None
self.longitude = None
@ -29,10 +30,12 @@ class EventSearchParams(object):
self.weekday = None
self.sort = None
self.status = None
self.public_status = None
self.favored_by_user_id = None
self.postal_code = None
self.not_referenced_by_organization_id = None
self.exclude_recurring = False
self.expected_participants_min = None
@property
def date_from(self):
@ -88,7 +91,7 @@ class EventSearchParams(object):
self.date_from = today
self.date_to = None
def set_planing_date_range(self):
def set_planning_date_range(self):
today = get_today()
self.date_from = today
self.date_to = date_set_end_of_day(today + relativedelta(months=3))
@ -126,6 +129,22 @@ class EventSearchParams(object):
return result
def load_public_status_list_param(self):
public_stati = self.load_list_param("public_status")
if public_stati is None: # pragma: no cover
return None
from project.models import PublicStatus
result = list()
for public_status in public_stati:
if public_status in PublicStatus.__members__:
result.append(PublicStatus.__members__[public_status])
return result
def load_from_request(self):
if "date_from" in request.args:
self.date_from_str = request.args["date_from"]
@ -154,6 +173,9 @@ class EventSearchParams(object):
if "event_place_id" in request.args:
self.event_place_id = request.args["event_place_id"]
if "expected_participants_min" in request.args:
self.expected_participants_min = request.args["expected_participants_min"]
if "event_list_id" in request.args:
self.event_list_id = self.load_list_param("event_list_id")
@ -172,5 +194,8 @@ class EventSearchParams(object):
if "status" in request.args:
self.status = self.load_status_list_param()
if "public_status" in request.args:
self.public_status = self.load_public_status_list_param()
if "exclude_recurring" in request.args:
self.exclude_recurring = self.load_bool_param("exclude_recurring")

View File

@ -1,6 +1,10 @@
const EventWarningPills = {
template: `
<span>
<span v-if="event.public_status" class="badge badge-pill badge-dark">
<template v-if="event.public_status == 'draft'">Entwurf</template>
<template v-else-if="event.public_status == 'planned'">In Planung</template>
</span>
<span v-if="event.status" class="badge badge-pill badge-warning">
<template v-if="event.status == 'cancelled'">Abgesagt</template>
<template v-else-if="event.status == 'movedOnline'">Online verschoben</template>

View File

@ -11,6 +11,7 @@ const EventImport = {
rules="required|url" />
<b-form-group v-slot="{ ariaDescribedby }">
<b-form-radio v-model="form.publicStatus" :aria-describedby="ariaDescribedby" value="draft">{{ $t("comp.draft") }}</b-form-radio>
<b-form-radio v-model="form.publicStatus" :aria-describedby="ariaDescribedby" value="planned">{{ $t("comp.planned") }}</b-form-radio>
<b-form-radio v-model="form.publicStatus" :aria-describedby="ariaDescribedby" value="published">{{ $t("comp.published") }}</b-form-radio>
</b-form-group>
<b-button variant="primary" type="submit" v-bind:disabled="isSubmitting">
@ -28,6 +29,7 @@ const EventImport = {
title: "Import event",
url: "URL",
published: "Publish event",
planned: "Save as planned",
draft: "Save as draft",
importError: "Unfortunately, no event could be imported from the URL.",
},
@ -37,6 +39,7 @@ const EventImport = {
title: "Veranstaltung importieren",
url: "URL",
published: "Veranstaltung veröffentlichen",
planned: "Als geplant speichern",
draft: "Als Entwurf speichern",
importError: "Von der URL konnte leider keine Veranstaltung importiert werden."
},

View File

@ -0,0 +1,278 @@
const PlanningList = {
template: `
<div v-cloak>
<template>
<v-app>
<v-row class="fill-height" style="margin:0;">
<v-col class="px-0">
<v-sheet height="64">
<v-toolbar flat>
<v-btn outlined class="mr-4" color="grey darken-2" @click="setToday">
{{ $t("comp.today") }}
</v-btn>
<v-btn fab text small color="grey darken-2" @click="$refs.calendar.prev()">
<v-icon small>
mdi-chevron-left
</v-icon>
</v-btn>
<v-btn fab text small color="grey darken-2" @click="$refs.calendar.next()">
<v-icon small>
mdi-chevron-right
</v-icon>
</v-btn>
<v-toolbar-title>
{{ title }}
</v-toolbar-title>
<v-toolbar-title class="mx-4 text--secondary font-weight-light">
{{ countTitle }}
</v-toolbar-title>
<v-progress-circular
indeterminate
color="primary"
class="mx-4"
v-show="isLoading"
></v-progress-circular>
<v-btn color="primary"
depressed outlined class="mr-4" @click="openFilter" v-show="!isLoading">
<v-icon small>
mdi-filter
</v-icon>
{{ $t("comp.filter") }}
</v-btn>
<v-spacer></v-spacer>
<v-btn-toggle
v-model="type"
color="primary"
dense
group
>
<v-btn value="day">
{{ $t("comp.day") }}
</v-btn>
<v-btn value="week">
{{ $t("comp.week") }}
</v-btn>
<v-btn value="month">
{{ $t("comp.month") }}
</v-btn>
</v-btn-toggle>
</v-toolbar>
</v-sheet>
<v-sheet v-show="warning">
<v-alert dense
outlined
text
type="warning">
{{ warning }}
</v-alert>
</v-sheet>
<v-sheet height="800">
<v-calendar
ref="calendar"
v-model="focus"
locale="de"
:weekdays="[1, 2, 3, 4, 5, 6, 0]"
:type="type"
:events="events"
:event-color="getEventColor"
event-more-text="{0} weitere"
@click:event="showEvent"
@click:more="viewDay"
@click:date="viewDay"
@change="calendarChanged">
</v-calendar>
<v-menu
v-model="selectedOpen"
:close-on-content-click="false"
:activator="selectedElement"
offset-x
>
<v-card flat v-if="selectedEvent">
<v-card-title>{{ selectedEvent.name }}</v-card-title>
<v-card-subtitle>
<v-icon small>mdi-calendar</v-icon> {{ $root.render_event_date(selectedEvent.date.start, selectedEvent.date.end, selectedEvent.date.allday) }}
<event-warning-pills :event="selectedEvent.date.event"></event-warning-pills>
</v-card-subtitle>
<v-card-text>
<div><v-icon small>mdi-database</v-icon> {{ selectedEvent.date.event.organization.name }}</div>
<div v-if="selectedEvent.date.event.organizer.name != selectedEvent.date.event.organization.name"><v-icon small>mdi-server</v-icon> {{ selectedEvent.date.event.organizer.name }}</div>
<div><v-icon small>mdi-map-marker</v-icon> {{ selectedEvent.date.event.place.name }}</div>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn
text
color="secondary"
@click="selectedOpen = false"
>
{{ $t("shared.close") }}
</v-btn>
<v-btn
text
color="primary"
@click="openEventDate(selectedEvent.date)"
>
{{ $t("shared.view") }}
</v-btn>
</v-card-actions>
</v-card>
</v-menu>
</v-sheet>
</v-col>
</v-row>
</v-app>
</template>
</div>
`,
i18n: {
messages: {
en: {
comp: {
countTitle: "{count} dates",
maxWarning: "The maximum number of dates was loaded. Shorten the time period or refine the search for better results.",
today: "Today",
day: "Day",
week: "Week",
month: "Month",
filter: "Filter",
},
},
de: {
comp: {
countTitle: "{count} Termine",
maxWarning: "Es wurde die maximale Anzahl an Terminen geladen. Verkürze den Zeitraum oder verfeinere die Suche für bessere Ergebnisse.",
today: "Heute",
day: "Tag",
week: "Woche",
month: "Monat",
filter: "Filter",
},
},
},
},
data: () => ({
focus: '',
type: 'month',
title: "",
countTitle: "",
events: [],
selectedEvent: null,
selectedElement: null,
selectedOpen: false,
isLoading: false,
maxDates: 200,
warning: null,
}),
mounted () {
this.$refs.calendar.checkChange();
},
methods: {
parameterChanged() {
if (this.$refs.calendar) {
this.loadEvents();
}
},
calendarChanged({ start, end }) {
$('#date_from').val(start.date);
$('#date_to').val(end.date);
this.loadEvents();
},
loadEvents(page = 1) {
$('#page').val(page);
this.title = this.$refs.calendar.title;
if (page == 1) {
this.events = [];
this.warning = null;
this.countTitle = "";
}
const vm = this;
axios
.get(`/api/v1/event-dates/search?` + $("#filter_form").serialize(), {
withCredentials: true,
handleLoading: this.handleLoading,
})
.then((response) => {
for (const date of response.data.items) {
vm.events.push({
name: date.event.name,
start: moment(date.start).toDate(),
end: date.end != null ? moment(date.end).toDate() : null,
timed: !date.allday,
date: date,
color: vm.$root.event_has_status_info(date.event) ? '#17a2b8' : '#007bff'
});
}
const count = vm.events.length;
vm.countTitle = vm.$t('comp.countTitle', { count: count });
vm.scrollToMinTime();
if (count >= vm.maxDates) {
vm.warning = vm.$t('comp.maxWarning');
return;
}
if (response.data.has_next) {
vm.loadEvents(response.data.next_num);
}
});
},
viewDay ({ date }) {
this.focus = date;
this.type = 'day';
},
setToday () {
this.focus = ''
},
openFilter () {
$('#filterFormModal').modal('show');
},
getEventColor (event) {
return event.color;
},
scrollToMinTime() {
if (!this.$refs.calendar) {
return;
}
if (this.$refs.calendar.type == 'month') {
return;
}
if (this.events.length < 1) {
return;
}
const min_event = this.events.reduce(function(prev, curr) {
return prev.start.getHours() < curr.start.getHours() ? prev : curr;
});
this.$refs.calendar.scrollToTime({ hour: min_event.start.getHours(), minute: 0 });
},
showEvent ({ nativeEvent, event }) {
const open = () => {
this.selectedEvent = event
this.selectedElement = nativeEvent.target
requestAnimationFrame(() => requestAnimationFrame(() => this.selectedOpen = true))
}
if (this.selectedOpen) {
this.selectedOpen = false
requestAnimationFrame(() => requestAnimationFrame(() => open()))
} else {
open()
}
nativeEvent.stopPropagation()
},
openEventDate(date) {
const url = `${axios.defaults.baseURL}/eventdate/${date.id}`;
window.open(url);
},
handleLoading(isLoading) {
this.isLoading = isLoading;
},
},
};

View File

@ -262,8 +262,12 @@
{% endmacro %}
{% macro render_public_status_pill(event) %}
{% if event.public_status and event.public_status == 1 %}
<span class="badge badge-pill badge-dark">{{ _('PublicStatus.draft') }}</span>
{% if event.public_status %}
{% if event.public_status == 1 %}
<span class="badge badge-pill badge-dark">{{ _('PublicStatus.draft') }}</span>
{% elif event.public_status == 3 %}
<span class="badge badge-pill badge-dark">{{ _('PublicStatus.planned') }}</span>
{% endif %}
{% endif %}
{% endmacro %}

View File

@ -368,8 +368,11 @@ $( function() {
</div>
{% endif %}
<p class="px-2 text-muted">{{ _('Planned events appear in the scheduling view, but not on public calendars.') }}</p>
<div class="d-flex flex-column flex-sm-row">
{{ form.submit(class="btn btn-primary m-1")|safe }}
{{ form.submit_planned(class="btn btn-secondary m-1")|safe }}
{{ form.submit_draft(class="btn btn-secondary m-1")|safe }}
</div>

View File

@ -488,9 +488,9 @@
</div>
<p>
{{ form.submit(class="btn btn-primary")|safe }}
<button id="toggle-search-btn" type="button" class="btn btn-secondary mx-2" data-toggle="collapse" data-target="#extended_search_form" aria-expanded="{% if form_collapsed %}false{% else %}true{% endif %}">{{ _('More filters') }}</button>
<button type="button" id="toggle-map-btn" class="btn btn-outline-secondary" onclick="toggle_map()"><i class="fa fa-map"></i> {{ _('Map view') }}</button>
{{ form.submit(class="btn btn-primary mt-1 mr-1")|safe }}
<button id="toggle-search-btn" type="button" class="btn btn-secondary mt-1 mr-1" data-toggle="collapse" data-target="#extended_search_form" aria-expanded="{% if form_collapsed %}false{% else %}true{% endif %}">{{ _('More filters') }}</button>
<button type="button" id="toggle-map-btn" class="btn btn-outline-secondary mt-1 mr-1" onclick="toggle_map()"><i class="fa fa-map"></i> {{ _('Map view') }}</button>
</p>
</form>
</div>

View File

@ -43,6 +43,9 @@
<link rel="icon" type="image/png" sizes="16x16" href="{{ url_for('static', filename='apple-touch-icon.png')}}">
<link rel="manifest" href="{{ url_for('static', filename='site.webmanifest')}}">
{%- block styles_before %}
{%- endblock styles_before %}
<link rel="stylesheet" href="{{ url_for('static', filename='ext/bootstrap.4.6.2.min.css')}}">
<link rel="stylesheet" href="{{ url_for('static', filename='ext/font-awesome.5.13.1/css/all.min.css')}}">
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='site.css')}}" />
@ -166,7 +169,7 @@
<div class="navbar-nav mr-auto">
<a class="nav-item nav-link" href="{{ url_for('event_dates') }}">{{ _('Events') }}</a>
<a class="nav-item nav-link" href="{{ url_for('organizations') }}">{{ _('Organizations') }}</a>
<a class="nav-item nav-link" href="{{ url_for('planing') }}">{{ _('Planing') }}</a>
<a class="nav-item nav-link" href="{{ url_for('planning') }}">{{ _('Planning') }}</a>
</div>
<div class="navbar-nav navbar-right">
{% if config["DOCS_URL"] %}

View File

@ -365,7 +365,8 @@
vue_app_data["docsUrl"] = "{{ config["DOCS_URL"] }}";
{% endif %}
var app = new Vue({
{% block vue_init_data %}
var vue_init_data = {
el: "#vue-container",
i18n,
router: router,
@ -473,10 +474,50 @@
return instance.format(format);
},
render_event_date(start, end, allday) {
const start_instance = moment(start);
const start_date_str = start_instance.format("dd. DD.MM.YYYY");
let result = start_date_str;
if (!allday) {
result += " " + start_instance.format("LT");
}
if (end != null) {
const end_instance = moment(end);
const end_date_str = end_instance.format("dd. DD.MM.YYYY");
if (end_date_str != start_date_str || !allday) {
result += " - ";
}
if (end_date_str != start_date_str) {
result += end_date_str;
}
if (!allday) {
result += " " + end_instance.format("LT");
}
}
return result;
},
event_has_status_info(event) {
if (event.public_status && event.public_status != 'published') {
return true;
}
if (event.status && event.status != 'scheduled') {
return true;
}
return false;
},
url_for_image(image, size) {
return `${axios.defaults.baseURL}${image.image_url}?s=${size}`
},
},
});
};
{% endblock %}
var app = new Vue(vue_init_data);
</script>
{% endblock %}

View File

@ -89,8 +89,8 @@ var vue_app_data = { eventId: 0 };
</div>
<p>
{{ form.submit(class="btn btn-primary")|safe }}
<button id="toggle-search-btn" type="button" class="btn btn-secondary mx-2" data-toggle="collapse" data-target="#extended_search_form" aria-expanded="{% if form_collapsed %}false{% else %}true{% endif %}">{{ _('More filters') }}</button>
{{ form.submit(class="btn btn-primary mt-1 mr-1")|safe }}
<button id="toggle-search-btn" type="button" class="btn btn-secondary mt-1 mr-1" data-toggle="collapse" data-target="#extended_search_form" aria-expanded="{% if form_collapsed %}false{% else %}true{% endif %}">{{ _('More filters') }}</button>
</p>
</form>
</div>
@ -103,8 +103,8 @@ var vue_app_data = { eventId: 0 };
<th>{{ _('Event') }}</th>
<th>{{ _('Organizer') }}</th>
<th>{{ _('Place') }}</th>
<th><i class="fa fa-fw fa-image" data-toggle="tooltip" title="{{ _('Photo') }}"></i></th>
<th><i class="fa fa-fw fa-link" data-toggle="tooltip" title="{{ _('Number of references') }} / {{ _('Number of reference requests.') }}"></i></th>
<th><i class="fa fa-fw fa-image" data-toggle="tooltip" data-boundary="window" title="{{ _('Photo') }}"></i></th>
<th><i class="fa fa-fw fa-link" data-toggle="tooltip" data-boundary="window" title="{{ _('Number of references') }} / {{ _('Number of reference requests.') }}"></i></th>
</tr>
</thead>
<tbody>
@ -138,8 +138,8 @@ var vue_app_data = { eventId: 0 };
<div><a href="{{ url_for('event_place_update', id=event.event_place.id) }}" class="text-body">{{ event.event_place.name }}</a></div>
<div>{% if event.event_place.location %}{{ event.event_place.location.postalCode }} {{ event.event_place.location.city }}{% endif %}</div>
</td>
<td><i class="fa fa-fw fa-image {% if event.photo %}text-success{% else %}text-muted{% endif %}" data-toggle="tooltip" title="{{ _('Photo') }}"></i></td>
<td class="fit"><span data-toggle="tooltip" title="{{ _('Number of references') }} / {{ _('Number of reference requests.') }}">{{ event.references|length }}/{{ event.reference_requests|length }}</span></td>
<td><i class="fa fa-fw fa-image {% if event.photo %}text-success{% else %}text-muted{% endif %}" data-toggle="tooltip" data-boundary="window" title="{{ _('Photo') }}"></i></td>
<td class="fit"><span data-toggle="tooltip" data-boundary="window" title="{{ _('Number of references') }} / {{ _('Number of reference requests.') }}">{{ event.references|length }}/{{ event.reference_requests|length }}</span></td>
</tr>
{% endfor %}
</tbody>

View File

@ -19,8 +19,8 @@
<th>{{ _('Location') }}</th>
<th>{{ _('Phone') }}</th>
<th>{{ _('Email') }} / {{ _('Link URL') }}</th>
<th><i class="fa fa-fw fa-image" data-toggle="tooltip" title="{{ _('Logo') }}"></i></th>
<th><i class="fa fa-fw fa-calendar" data-toggle="tooltip" title="{{ _('Number of events') }}"></i></th>
<th><i class="fa fa-fw fa-image" data-toggle="tooltip" data-boundary="window" title="{{ _('Logo') }}"></i></th>
<th><i class="fa fa-fw fa-calendar" data-toggle="tooltip" data-boundary="window" title="{{ _('Number of events') }}"></i></th>
</tr>
</thead>
<tbody>
@ -44,8 +44,8 @@
<div>{{ organizer.email or '' }}</div>
<div>{{ organizer.url or '' }}</div>
</td>
<td><i class="fa fa-fw fa-image {% if organizer.logo %}text-success{% else %}text-muted{% endif %}" data-toggle="tooltip" title="{{ _('Logo') }}"></i></td>
<td><a class="text-body" href="{{ url_for('manage_admin_unit_events', id=admin_unit.id, organizer_id=organizer.id) }}" data-toggle="tooltip" title="{{ _('Number of events') }}">{{ organizer.events|length }}</a></td>
<td><i class="fa fa-fw fa-image {% if organizer.logo %}text-success{% else %}text-muted{% endif %}" data-toggle="tooltip" data-boundary="window" title="{{ _('Logo') }}"></i></td>
<td><a class="text-body" href="{{ url_for('manage_admin_unit_events', id=admin_unit.id, organizer_id=organizer.id) }}" data-toggle="tooltip" data-boundary="window" title="{{ _('Number of events') }}">{{ organizer.events|length }}</a></td>
</tr>
{% endfor %}
</tbody>

View File

@ -17,9 +17,9 @@
<tr>
<th>{{ _('Name') }}</th>
<th>{{ _('Location') }}</th>
<th><i class="fa fa-fw fa-map-marker-alt" data-toggle="tooltip" title="{{ _('Coordinates') }}"></i></th>
<th><i class="fa fa-fw fa-image" data-toggle="tooltip" title="{{ _('Photo') }}"></i></th>
<th><i class="fa fa-fw fa-calendar" data-toggle="tooltip" title="{{ _('Number of events') }}"></i></th>
<th><i class="fa fa-fw fa-map-marker-alt" data-toggle="tooltip" data-boundary="window" title="{{ _('Coordinates') }}"></i></th>
<th><i class="fa fa-fw fa-image" data-toggle="tooltip" data-boundary="window" title="{{ _('Photo') }}"></i></th>
<th><i class="fa fa-fw fa-calendar" data-toggle="tooltip" data-boundary="window" title="{{ _('Number of events') }}"></i></th>
</tr>
</thead>
<tbody>
@ -35,9 +35,9 @@
</div>
</td>
<td>{{ render_location(place.location) }}</td>
<td><i class="fa fa-fw fa-map-marker-alt {% if place.location and place.location.coordinate %}text-success{% else %}text-muted{% endif %}" data-toggle="tooltip" title="{{ _('Coordinates') }}"></i></td>
<td><i class="fa fa-fw fa-image {% if place.photo %}text-success{% else %}text-muted{% endif %}" data-toggle="tooltip" title="{{ _('Photo') }}"></i></td>
<td><a class="text-body" href="{{ url_for('manage_admin_unit_events', id=admin_unit.id, event_place_id=place.id) }}" data-toggle="tooltip" title="{{ _('Number of events') }}">{{ place.events|length }}</a></td>
<td><i class="fa fa-fw fa-map-marker-alt {% if place.location and place.location.coordinate %}text-success{% else %}text-muted{% endif %}" data-toggle="tooltip" data-boundary="window" title="{{ _('Coordinates') }}"></i></td>
<td><i class="fa fa-fw fa-image {% if place.photo %}text-success{% else %}text-muted{% endif %}" data-toggle="tooltip" data-boundary="window" title="{{ _('Photo') }}"></i></td>
<td><a class="text-body" href="{{ url_for('manage_admin_unit_events', id=admin_unit.id, event_place_id=place.id) }}" data-toggle="tooltip" data-boundary="window" title="{{ _('Number of events') }}">{{ place.events|length }}</a></td>
</tr>
{% endfor %}
</tbody>

View File

@ -1,138 +0,0 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_form_styles, render_form_scripts, render_jquery_steps_header, render_field, render_field_with_errors, render_event_dates_date_field, render_event_dates_location_field, render_google_filter_autocomplete_header, render_pagination, render_place, render_events_sub_menu %}
{%- block title -%}
{{ _('Event Planing') }}
{%- endblock -%}
{% block content_container_attribs %}{% endblock %}
{% block styles %}
{{ render_form_styles() }}
{% endblock %}
{% block header_before_site_js %}
{{ render_form_scripts() }}
{%- endblock -%}
{% block header %}
{{ render_jquery_steps_header() }}
{{ render_google_filter_autocomplete_header() }}
{% set max_events = 50 %}
<script>
$( function() {
$("#filter_form").submit(function(e) {
e.stopPropagation();
handle_request_start();
var tbody = $("#result_table tbody");
tbody.empty();
$.ajax({
url: "{{ url_for('api_v1_event_date_search', per_page=max_events) }}",
type: "get",
dataType: "json",
data: $(this).serialize(),
error: function(xhr, status, error) {
handle_request_error(xhr, status, error);
},
success: function (data) {
var date_from = moment($('#date_from').val());
var date_to = moment($('#date_to').val());
var current_day = date_from;
var event_dates = data.items;
var event_date_count = event_dates.length;
var event_date_index = 0;
if (event_date_count == {{ max_events }}) {
tbody.append('<tr class="table-warning"><td colspan="5">Es wurde die maximale Anzahl von {{ max_events }} Veranstaltungen geladen. Verfeinere die Suche für bessere Ergebnisse.</td></tr>');
}
var no_weekday_checked = ($('input[name="weekday"]:checked').length == 0);
while (current_day <= date_to) {
var weekday = current_day.weekday();
var current_weekday_checked = $("#weekday-" + weekday).is(':checked');
if (current_weekday_checked || no_weekday_checked) {
tbody.append('<tr class="table-secondary"><td colspan="5">' + current_day.format("dd. DD.MM.YYYY") + '</td></tr>');
var no_events = true;
var same_day = true;
while (same_day && (event_date_index < event_date_count)) {
var event_date = event_dates[event_date_index];
var event = event_date.event;
var start = moment(event_date.start);
if (!start.isSame(current_day, 'day')) {
same_day = false;
} else {
tbody.append('<tr>' +
'<td class="fit">' + (event_date.allday ? '{{ _('All-day') }}' : start.format("LT")) + '</td>' +
'<td colspan="3"><a href="eventdate/' + event_date.id + '">' + event.name + '</a> ' + render_event_warning_pills(event) + '</td>' +
'<td class="small text-muted">' + event.organizer.name + '</td>' +
'</tr>');
no_events = false;
event_date_index++;
}
}
if (no_events) {
tbody.append('<tr class="table-success"><td></td><td colspan="4" class="p-2"><i class="fa fa fa-calendar-check"></i> Frei</td></tr>');
}
}
current_day = current_day.add(1, 'days');
}
handle_request_success();
}
});
return false;
});
});
</script>
{% endblock %}
{% block content %}
<div class="p-3">
<h1 class="mb-1">{{ _('Event Planing') }}</h1>
<p class="text-muted">Finde einen freien Termin im Kalender für deine Veranstaltung.</p>
<div>
<form action="" id="filter_form" class="form" method="GET" autocomplete="off">
{{ form.hidden_tag() }}
{{ render_event_dates_location_field(form.location, form.distance) }}
{{ render_field_with_errors(form.category_id) }}
{{ render_event_dates_date_field(form.date_from, form.date_to) }}
{{ render_field_with_errors(form.weekday, ri="multicheckbox-inline") }}
{{ render_field(form.submit) }}
</form>
</div>
</div>
<div class="row">
<div class="col-md">
<div id="result_container">
<div class="m-1 small text-center text-secondary" id="result_info"></div>
<div class="table-responsive" style="min-height: 300px;">
<table class="table table-hover table-sm table-striped" id="result_table">
<tbody>
</tbody>
</table>
</div>
</div>
<div class="spinner-border m-3" role="status" id="spinner" style="display: none;">
<span class="sr-only">Loading&hellip;</span>
</div>
<div class="alert alert-danger m-3" role="alert" id="error_alert" style="display: none;"></div>
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,110 @@
{% extends "layout_vue.html" %}
{% from "_macros.html" import render_form_styles, render_form_scripts, render_jquery_steps_header, render_field, render_field_with_errors, render_event_dates_date_field, render_event_dates_location_field, render_google_filter_autocomplete_header, render_pagination, render_place, render_events_sub_menu %}
{%- block title -%}
{{ _('Event Planning') }}
{%- endblock -%}
{%- block styles_before %}
<link href="/static/ext/materialdesignicons.6.5.95.min.css" rel="stylesheet">
<link href="/static/ext/vuetify.2.6.2.min.css" rel="stylesheet">
{%- endblock styles_before %}
{% block styles %}
{{ render_form_styles() }}
<link rel="stylesheet" type="text/css" href="/static/widget/calendar.css">
<style>
[v-cloak] {
display: none;
}
.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto {
padding-top:0;
padding-bottom:0;
}
</style>
{% endblock %}
{% block header_before_site_js %}
{{ super() }}
{{ render_form_scripts() }}
{%- endblock -%}
{% block component_scripts %}
<script src="/static/ext/vuetify.2.6.2.js"></script>
<script src="{{ url_for('static', filename='vue/planning/list.vue.js')}}"></script>
{% endblock %}
{% block component_definitions %}
Vue.component("PlanningList", PlanningList);
{% endblock %}
{% block vue_init_data %}
{{ super() }}
vue_init_data.vuetify = new Vuetify();
{% endblock %}
{% block vue_container %}
{% endblock %}
{% block header %}
{{ render_jquery_steps_header() }}
{{ render_google_filter_autocomplete_header() }}
<script>
$( function() {
$("#refresh-button").click(function() {
$('#filterFormModal').modal('hide');
app.$refs.planninglist.parameterChanged();
});
});
</script>
{% endblock %}
{% block content %}
<h1 class="mb-4">
{{ _('Event Planning') }}
{% if config["DOCS_URL"] %}
<a class="btn btn-outline-info btn-sm m-1 my-auto float-right" href="{{ config["DOCS_URL"] }}/goto/event-planning" target="_blank" rel="noopener noreferrer" role="button"><i class="fa fa-fw fa-info-circle"></i> {{ _('Docs') }}</a>
{% endif %}
</h1>
<div class="modal fade" id="filterFormModal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">{{ _('Filters') }}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<form action="" id="filter_form" class="form" method="GET" autocomplete="off">
{{ form.hidden_tag() }}
<input id="page" name="page" type="hidden" value="1" />
<input id="per_page" name="per_page" type="hidden" value="50" />
<input name="public_status" type="hidden" value="published" />
<input name="public_status" type="hidden" value="published" />
{{ render_field_with_errors(form.category_id, ri="multicheckbox-inline", formrow="1") }}
{{ render_field_with_errors(form.postal_code, formrow="1") }}
{{ render_event_dates_location_field(form.location, form.distance) }}
{{ render_field_with_errors(form.expected_participants_min, formrow="1") }}
{{ render_field_with_errors(form.exclude_recurring, ri="checkbox", formrow="1") }}
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">{{ _('Close') }}</button>
<button type="button" id="refresh-button" class="btn btn-primary">{{ _('Refresh') }}</button>
</div>
</div>
</div>
</div>
<div id="vue-container">
<planning-list ref="planninglist" />
</div>
{{ super() }}
{% endblock %}

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2023-06-02 12:16+0200\n"
"POT-Creation-Date: 2023-06-09 13:32+0200\n"
"PO-Revision-Date: 2020-06-07 18:51+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: de\n"
@ -203,24 +203,24 @@ msgstr "message"
msgid "You have received an invitation"
msgstr "Du hast eine Einladung erhalten"
#: project/forms/admin.py:11 project/templates/layout.html:334
#: project/forms/admin.py:11 project/templates/layout.html:337
#: project/views/root.py:55
msgid "Terms of service"
msgstr "Nutzungsbedingungen"
#: project/forms/admin.py:12 project/templates/layout.html:339
#: project/forms/admin.py:12 project/templates/layout.html:342
#: project/views/root.py:67
msgid "Legal notice"
msgstr "Impressum"
#: project/forms/admin.py:13 project/templates/_macros.html:1461
#: project/templates/layout.html:343
#: project/forms/admin.py:13 project/templates/_macros.html:1465
#: project/templates/layout.html:346
#: project/templates/widget/event_suggestion/create.html:204
#: project/views/admin_unit.py:83 project/views/root.py:75
msgid "Contact"
msgstr "Kontakt"
#: project/forms/admin.py:14 project/templates/layout.html:347
#: project/forms/admin.py:14 project/templates/layout.html:350
#: project/views/root.py:83
msgid "Privacy"
msgstr "Datenschutz"
@ -261,7 +261,7 @@ msgstr "Nutzer löschen"
#: project/forms/admin_unit_member.py:30 project/forms/event.py:107
#: project/forms/event_suggestion.py:38 project/forms/organizer.py:33
#: project/forms/user.py:18 project/forms/user.py:23
#: project/templates/_macros.html:246 project/templates/_macros.html:1557
#: project/templates/_macros.html:246 project/templates/_macros.html:1561
#: project/templates/admin/admin.html:27 project/templates/admin/email.html:4
#: project/templates/admin/email.html:66 project/templates/admin/users.html:19
#: project/templates/manage/organizers.html:21
@ -374,9 +374,9 @@ msgstr "Newsletter senden"
msgid "Street"
msgstr "Straße"
#: project/forms/admin_unit.py:18 project/forms/event.py:453
#: project/forms/admin_unit.py:18 project/forms/event.py:461
#: project/forms/event_date.py:52 project/forms/event_place.py:16
#: project/forms/organizer.py:16
#: project/forms/organizer.py:16 project/forms/planning.py:44
msgid "Postal code"
msgstr "Postleitzahl"
@ -419,7 +419,7 @@ msgstr ""
"eindeutig zu identifizieren. Der Kurzname darf nur Buchstaben, Nummern "
"und Unterstriche enthalten."
#: project/forms/admin_unit.py:48 project/templates/_macros.html:1599
#: project/forms/admin_unit.py:48 project/templates/_macros.html:1603
msgid "Short name must contain only letters numbers or underscore"
msgstr "Der Kurzname darf nur Buchstaben, Nummern und Unterstriche enthalten"
@ -440,13 +440,13 @@ msgstr "Link URL"
#: project/forms/admin_unit.py:61 project/forms/event.py:108
#: project/forms/event_suggestion.py:31 project/forms/organizer.py:34
#: project/templates/_macros.html:305
#: project/templates/_macros.html:309
#: project/templates/manage/organizers.html:20
msgid "Phone"
msgstr "Telefon"
#: project/forms/admin_unit.py:62 project/forms/event.py:109
#: project/forms/organizer.py:35 project/templates/_macros.html:313
#: project/forms/organizer.py:35 project/templates/_macros.html:317
msgid "Fax"
msgstr "Fax"
@ -539,7 +539,7 @@ msgstr "Löschung beantragen"
msgid "Cancel deletion"
msgstr "Löschen abbrechen"
#: project/forms/admin_unit.py:158 project/templates/layout.html:305
#: project/forms/admin_unit.py:158 project/templates/layout.html:308
#: project/templates/manage/delete_membership.html:6
msgid "Leave organization"
msgstr "Organisation verlassen"
@ -678,20 +678,20 @@ msgid ""
"days."
msgstr "Gib an, wann der Termin endet. Ein Termin darf maximal 14 Tage dauern."
#: project/forms/event.py:50 project/templates/planing/list.html:75
#: project/forms/event.py:50
msgid "All-day"
msgstr "Ganztägig"
#: project/forms/event.py:54 project/templates/_macros.html:1769
#: project/forms/event.py:54 project/templates/_macros.html:1773
#: project/templates/widget/event_suggestion/create.html:240
msgid "Recurring event"
msgstr "Serientermin"
#: project/forms/event.py:61 project/templates/_macros.html:1318
#: project/forms/event.py:61 project/templates/_macros.html:1322
msgid "The start must be before the end."
msgstr "Der Start muss vor dem Ende sein."
#: project/forms/event.py:67 project/templates/_macros.html:1335
#: project/forms/event.py:67 project/templates/_macros.html:1339
msgid "An event can last a maximum of 14 days."
msgstr "Eine Veranstaltung darf maximal 14 Tage dauern."
@ -777,7 +777,7 @@ msgid "If the participants needs to register for the event."
msgstr "Wenn sich die Teilnehmer für die Veranstaltung anmelden müssen."
#: project/forms/event.py:170 project/templates/_macros.html:260
#: project/templates/layout.html:115
#: project/templates/layout.html:118
msgid "Booked up"
msgstr "Ausgebucht"
@ -837,11 +837,11 @@ msgstr "Teilnahme"
msgid "EventAttendanceMode.offline"
msgstr "Präsenzveranstaltung"
#: project/forms/event.py:217 project/templates/layout.html:103
#: project/forms/event.py:217 project/templates/layout.html:106
msgid "EventAttendanceMode.online"
msgstr "Online"
#: project/forms/event.py:219 project/templates/layout.html:106
#: project/forms/event.py:219 project/templates/layout.html:109
msgid "EventAttendanceMode.mixed"
msgstr "Präsenzveranstaltung und online"
@ -866,8 +866,8 @@ msgstr ""
"Wir empfehlen dir, ein Foto für die Veranstaltung hochzuladen. Es macht "
"schon deutlich mehr her, aber es geht natürlich auch ohne."
#: project/forms/event.py:242 project/templates/_macros.html:418
#: project/templates/_macros.html:581
#: project/forms/event.py:242 project/templates/_macros.html:422
#: project/templates/_macros.html:585
msgid "Previous start date"
msgstr "Vorheriges Startdatum"
@ -918,9 +918,9 @@ msgid "Invalid co-organizer."
msgstr "Ungültiger Mitveranstalter."
#: project/forms/event.py:286 project/forms/event.py:295
#: project/forms/event.py:368 project/forms/event.py:442
#: project/forms/event_suggestion.py:50 project/templates/_macros.html:458
#: project/templates/_macros.html:624 project/templates/event/create.html:288
#: project/forms/event.py:373 project/forms/event.py:450
#: project/forms/event_suggestion.py:50 project/templates/_macros.html:462
#: project/templates/_macros.html:628 project/templates/event/create.html:288
#: project/templates/event/update.html:170
#: project/templates/event_place/create.html:31
#: project/templates/event_place/delete.html:13
@ -938,9 +938,9 @@ msgid "Enter new place"
msgstr "Neuen Ort eingeben"
#: project/forms/event.py:302 project/forms/event.py:311
#: project/forms/event.py:376 project/forms/event.py:439
#: project/forms/event.py:381 project/forms/event.py:447
#: project/forms/event_date.py:40 project/forms/event_suggestion.py:60
#: project/templates/_macros.html:495 project/templates/_macros.html:667
#: project/templates/_macros.html:499 project/templates/_macros.html:671
#: project/templates/event/create.html:257
#: project/templates/event/update.html:160
#: project/templates/manage/events.html:104
@ -963,18 +963,22 @@ msgid "Save as draft"
msgstr "Als Entwurf speichern"
#: project/forms/event.py:318
msgid "Save as planned"
msgstr "Als geplant speichern"
#: project/forms/event.py:319
msgid "Publish event"
msgstr "Veranstaltung veröffentlichen"
#: project/forms/event.py:350
#: project/forms/event.py:355
msgid "Select existing place or enter new place"
msgstr "Existierenden Ort wählen oder neuen Ort eingeben"
#: project/forms/event.py:358
#: project/forms/event.py:363
msgid "Select existing organizer or enter new organizer"
msgstr "Wähle einen vorhandenen Veranstalter oder gib einen neuen Veranstalter ein"
#: project/forms/event.py:371
#: project/forms/event.py:376
msgid ""
"Choose where the event takes place. You can add and modify places at "
"Organization > Places."
@ -982,7 +986,7 @@ msgstr ""
"Wähle, wo die Veranstaltung stattfindet. Du kannst Orte unter "
"Organisation > Orte hinzufügen und ändern."
#: project/forms/event.py:379
#: project/forms/event.py:384
msgid ""
"Select the organizer. You can add and modify organizers at Organization >"
" Organizers."
@ -990,87 +994,93 @@ msgstr ""
"Wähle den Veranstalter. Du kannst Veranstalter unter Organisation > "
"Veranstalter hinzufügen und ändern."
#: project/forms/event.py:385 project/templates/event/update.html:149
#: project/forms/event.py:390 project/templates/event/update.html:149
#: project/templates/oauth2_token/list.html:21
msgid "Status"
msgstr "Status"
#: project/forms/event.py:388
#: project/forms/event.py:393
msgid "EventStatus.scheduled"
msgstr "Geplant"
#: project/forms/event.py:389 project/templates/layout.html:69
#: project/templates/layout.html:84
#: project/forms/event.py:394 project/templates/layout.html:72
#: project/templates/layout.html:87
msgid "EventStatus.cancelled"
msgstr "Abgesagt"
#: project/forms/event.py:390 project/templates/layout.html:72
#: project/templates/layout.html:87
#: project/forms/event.py:395 project/templates/layout.html:75
#: project/templates/layout.html:90
msgid "EventStatus.movedOnline"
msgstr "Online verschoben"
#: project/forms/event.py:391 project/templates/layout.html:75
#: project/templates/layout.html:90
#: project/forms/event.py:396 project/templates/layout.html:78
#: project/templates/layout.html:93
msgid "EventStatus.postponed"
msgstr "Verschoben"
#: project/forms/event.py:392 project/templates/layout.html:78
#: project/templates/layout.html:93
#: project/forms/event.py:397 project/templates/layout.html:81
#: project/templates/layout.html:96
msgid "EventStatus.rescheduled"
msgstr "Neu angesetzt"
#: project/forms/event.py:394
#: project/forms/event.py:399
msgid "Select the status of the event."
msgstr "Wähle den Status der Veranstaltung."
#: project/forms/event.py:398
#: project/forms/event.py:403
msgid "Public status"
msgstr "Öffentlicher Status"
#: project/forms/event.py:401
#: project/forms/event.py:406
msgid "PublicStatus.published"
msgstr "Veröffentlicht"
#: project/forms/event.py:402 project/templates/_macros.html:266
#: project/forms/event.py:407 project/templates/_macros.html:269
msgid "PublicStatus.planned"
msgstr "In Planung"
#: project/forms/event.py:408 project/templates/_macros.html:267
msgid "PublicStatus.draft"
msgstr "Entwurf"
#: project/forms/event.py:404
msgid "Select the public status of the event."
msgstr "Wähle den öffentlichen Status der Veranstaltung."
#: project/forms/event.py:410 project/templates/event/create.html:371
msgid "Planned events appear in the scheduling view, but not on public calendars."
msgstr ""
"Geplante Veranstaltungen werden in der Planungsansicht angezeigt, aber "
"nicht in öffentlichen Kalendern."
#: project/forms/event.py:407 project/templates/event/update.html:5
#: project/forms/event.py:415 project/templates/event/update.html:5
#: project/templates/event/update.html:117
msgid "Update event"
msgstr "Veranstaltung aktualisieren"
#: project/forms/event.py:423 project/templates/_macros.html:1275
#: project/forms/event.py:431 project/templates/_macros.html:1279
#: project/templates/event/actions.html:66
#: project/templates/event/delete.html:6
msgid "Delete event"
msgstr "Veranstaltung löschen"
#: project/forms/event.py:430 project/forms/event_date.py:14
#: project/forms/planing.py:14
#: project/forms/event.py:438 project/forms/event_date.py:14
#: project/forms/planning.py:21
msgid "From"
msgstr "Von"
#: project/forms/event.py:432 project/forms/event_date.py:16
#: project/forms/planing.py:16
#: project/forms/event.py:440 project/forms/event_date.py:16
#: project/forms/planning.py:22
msgid "to"
msgstr "bis"
#: project/forms/event.py:434 project/forms/event_date.py:18
#: project/forms/event.py:442 project/forms/event_date.py:18
msgid "Keyword"
msgstr "Stichwort"
#: project/forms/event.py:436 project/forms/event_date.py:20
#: project/forms/planing.py:19 project/templates/_macros.html:391
#: project/forms/event.py:444 project/forms/event_date.py:20
#: project/forms/planning.py:24 project/templates/_macros.html:395
msgid "Category"
msgstr "Kategorie"
#: project/forms/event.py:446 project/forms/event_date.py:26
#: project/forms/planing.py:22 project/templates/_macros.html:320
#: project/forms/event.py:454 project/forms/event_date.py:26
#: project/forms/planning.py:27 project/templates/_macros.html:324
#: project/templates/admin_unit/create.html:39
#: project/templates/admin_unit/update.html:47
#: project/templates/event_place/create.html:40
@ -1082,28 +1092,29 @@ msgstr "Kategorie"
msgid "Location"
msgstr "Standort"
#: project/forms/event.py:448 project/forms/event_date.py:28
#: project/forms/planing.py:24
#: project/forms/event.py:456 project/forms/event_date.py:28
#: project/forms/planning.py:29
msgid "Distance"
msgstr "Distanz"
#: project/forms/event.py:455 project/forms/event_date.py:49
#: project/forms/event.py:463 project/forms/event_date.py:49
#: project/forms/planning.py:41
msgid "Exclude recurring events"
msgstr "Serientermine nicht anzeigen"
#: project/forms/event.py:459 project/forms/event_date.py:54
#: project/forms/event.py:467 project/forms/event_date.py:54
msgid "Find events"
msgstr "Veranstaltungen finden"
#: project/forms/event_date.py:35 project/forms/reference.py:11
#: project/forms/reference_request.py:16 project/templates/_macros.html:511
#: project/templates/_macros.html:684
#: project/forms/reference_request.py:16 project/templates/_macros.html:515
#: project/templates/_macros.html:688
#: project/templates/admin/delete_admin_unit.html:13
#: project/templates/admin_unit/cancel_deletion.html:13
#: project/templates/admin_unit/create.html:28
#: project/templates/admin_unit/request_deletion.html:15
#: project/templates/admin_unit/update.html:36
#: project/templates/layout.html:257
#: project/templates/layout.html:260
#: project/templates/manage/delete_membership.html:13
#: project/templates/verification_request/delete.html:13
#: project/templates/verification_request/review.html:28
@ -1114,7 +1125,7 @@ msgstr "Organisation"
msgid "Show unreferenced events only"
msgstr "Nur nicht empfohlene Veranstaltungen anzeigen"
#: project/forms/event_date.py:63 project/forms/planing.py:36
#: project/forms/event_date.py:63
#: project/templates/widget/event_date/list.html:82
msgid "Find"
msgstr "Finden"
@ -1243,10 +1254,18 @@ msgstr "Veranstalter aktualisieren"
msgid "Delete organizer"
msgstr "Veranstalter löschen"
#: project/forms/planing.py:30
#: project/forms/planning.py:35
msgid "Weekdays"
msgstr "Wochentage"
#: project/forms/planning.py:46
msgid "Min. expected number of participants"
msgstr "Mind. erwartete Teilnehmerzahl"
#: project/forms/planning.py:50 project/templates/planning/list.html:98
msgid "Refresh"
msgstr "Aktualisieren"
#: project/forms/reference.py:22
msgid "Save reference"
msgstr "Empfehlung speichern"
@ -1272,7 +1291,7 @@ msgid "Delete request"
msgstr "Anfrage löschen"
#: project/forms/reference_request.py:28
#: project/forms/verification_request.py:24 project/templates/_macros.html:1473
#: project/forms/verification_request.py:24 project/templates/_macros.html:1477
#: project/templates/event_suggestion/review_status.html:18
#: project/templates/reference_request/review_status.html:12
#: project/templates/verification_request/review_status.html:4
@ -1422,31 +1441,31 @@ msgstr "Auf Google Maps anzeigen"
msgid "Link"
msgstr "Link"
#: project/templates/_macros.html:299
#: project/templates/_macros.html:303
msgid "Verified"
msgstr "Verifiziert"
#: project/templates/_macros.html:368
#: project/templates/_macros.html:372
#, python-format
msgid "Created at %(created_at)s by %(created_by)s."
msgstr "Erstellt am %(created_at)s von %(created_by)s."
#: project/templates/_macros.html:370
#: project/templates/_macros.html:374
#, python-format
msgid "Created at %(created_at)s."
msgstr "Erstellt am %(created_at)s."
#: project/templates/_macros.html:375
#: project/templates/_macros.html:379
#, python-format
msgid "Last updated at %(updated_at)s by %(updated_by)s."
msgstr "Zuletzt aktualisiert am %(updated_at)s von %(updated_by)s."
#: project/templates/_macros.html:377
#: project/templates/_macros.html:381
#, python-format
msgid "Last updated at %(updated_at)s."
msgstr "Zuletzt aktualisiert am %(updated_at)s."
#: project/templates/_macros.html:407 project/templates/_macros.html:577
#: project/templates/_macros.html:411 project/templates/_macros.html:581
#: project/templates/event/actions.html:25
#: project/templates/event/create.html:234
#: project/templates/event/update.html:126
@ -1455,46 +1474,46 @@ msgstr "Zuletzt aktualisiert am %(updated_at)s."
msgid "Event"
msgstr "Veranstaltung"
#: project/templates/_macros.html:413 project/templates/_macros.html:999
#: project/templates/_macros.html:417 project/templates/_macros.html:1003
msgid "Date"
msgstr "Datum"
#: project/templates/_macros.html:440 project/templates/_macros.html:599
#: project/templates/_macros.html:1542 project/templates/event/actions.html:51
#: project/templates/_macros.html:444 project/templates/_macros.html:603
#: project/templates/_macros.html:1546 project/templates/event/actions.html:51
msgid "Share"
msgstr "Teilen"
#: project/templates/_macros.html:444 project/templates/_macros.html:603
#: project/templates/_macros.html:1572
#: project/templates/_macros.html:448 project/templates/_macros.html:607
#: project/templates/_macros.html:1576
msgid "Add to calendar"
msgstr "Zum Kalender"
#: project/templates/_macros.html:452 project/templates/_macros.html:617
#: project/templates/_macros.html:456 project/templates/_macros.html:621
#: project/templates/event/report.html:4
msgid "Report event"
msgstr "Veranstaltung melden"
#: project/templates/_macros.html:479 project/templates/_macros.html:650
#: project/templates/_macros.html:483 project/templates/_macros.html:654
msgid "Show directions"
msgstr "Anreise planen"
#: project/templates/_macros.html:484 project/templates/_macros.html:642
#: project/templates/_macros.html:488 project/templates/_macros.html:646
msgid "The event takes place online."
msgstr "Die Veranstaltung findet online statt."
#: project/templates/_macros.html:486 project/templates/_macros.html:644
#: project/templates/_macros.html:490 project/templates/_macros.html:648
msgid "The event takes place both offline and online."
msgstr ""
"Die Veranstaltung findet sowohl als Präsenzveranstaltung als auch online "
"statt."
#: project/templates/_macros.html:607 project/templates/layout.html:183
#: project/templates/_macros.html:611 project/templates/layout.html:186
#: project/templates/user/favorite_events.html:4
msgid "Favorite events"
msgstr "Merkzettel"
#: project/templates/_macros.html:610 project/templates/_macros.html:653
#: project/templates/_macros.html:785
#: project/templates/_macros.html:614 project/templates/_macros.html:657
#: project/templates/_macros.html:789
#: project/templates/admin/admin_units.html:36
#: project/templates/admin/users.html:36
#: project/templates/manage/events.html:118
@ -1507,11 +1526,11 @@ msgstr "Merkzettel"
msgid "Edit"
msgstr "Bearbeiten"
#: project/templates/_macros.html:711
#: project/templates/_macros.html:715
msgid "Referenced by"
msgstr "Empfohlen von"
#: project/templates/_macros.html:723 project/templates/_macros.html:1285
#: project/templates/_macros.html:727 project/templates/_macros.html:1289
#: project/templates/event/actions.html:38
#: project/templates/event_date/list.html:251
#: project/templates/manage/events.html:125
@ -1519,39 +1538,39 @@ msgstr "Empfohlen von"
msgid "Reference event"
msgstr "Veranstaltung empfehlen"
#: project/templates/_macros.html:732
#: project/templates/_macros.html:736
#: project/templates/manage/reference_requests_incoming.html:5
#: project/templates/manage/reference_requests_outgoing.html:5
msgid "Reference requests"
msgstr "Empfehlungsanfragen"
#: project/templates/_macros.html:743 project/templates/_macros.html:1282
#: project/templates/_macros.html:747 project/templates/_macros.html:1286
#: project/templates/event/actions.html:32
#: project/templates/manage/events.html:123
msgid "Request reference"
msgstr "Empfehlung anfragen"
#: project/templates/_macros.html:751 project/templates/event_date/list.html:6
#: project/templates/_macros.html:755 project/templates/event_date/list.html:6
#: project/templates/event_date/list.html:461
#: project/templates/reference_request/review.html:32
msgid "Event Dates"
msgstr "Termine"
#: project/templates/_macros.html:849
#: project/templates/_macros.html:853
msgid "Search location on Google"
msgstr "Ort bei Google suchen"
#: project/templates/_macros.html:916
#: project/templates/_macros.html:920
#, python-format
msgid "%(count)d event dates"
msgstr "%(count)d Termine"
#: project/templates/_macros.html:939 project/templates/_macros.html:941
#: project/templates/_macros.html:943 project/templates/_macros.html:945
#: project/templates/event_date/list.html:510
msgid "First"
msgstr "Letzte"
#: project/templates/_macros.html:944 project/templates/_macros.html:946
#: project/templates/_macros.html:948 project/templates/_macros.html:950
#: project/templates/event_date/list.html:511
#: project/templates/widget/event_suggestion/create.html:193
#: project/templates/widget/event_suggestion/create.html:218
@ -1562,12 +1581,12 @@ msgstr "Letzte"
msgid "Previous"
msgstr "Zurück"
#: project/templates/_macros.html:948
#: project/templates/_macros.html:952
#, python-format
msgid "Page %(page)d of %(pages)d (%(total)d total)"
msgstr "Seite %(page)d von %(pages)d (%(total)d insgesamt)"
#: project/templates/_macros.html:950 project/templates/_macros.html:952
#: project/templates/_macros.html:954 project/templates/_macros.html:956
#: project/templates/event_date/list.html:513
#: project/templates/widget/event_suggestion/create.html:194
#: project/templates/widget/event_suggestion/create.html:219
@ -1577,98 +1596,98 @@ msgstr "Seite %(page)d von %(pages)d (%(total)d insgesamt)"
msgid "Next"
msgstr "Weiter"
#: project/templates/_macros.html:955 project/templates/_macros.html:957
#: project/templates/_macros.html:959 project/templates/_macros.html:961
#: project/templates/event_date/list.html:514
msgid "Last"
msgstr "Erste"
#: project/templates/_macros.html:1022
#: project/templates/_macros.html:1026
msgid "Radius"
msgstr "Umkreis"
#: project/templates/_macros.html:1204
#: project/templates/_macros.html:1208
msgid "Edit image"
msgstr "Bild bearbeiten"
#: project/templates/_macros.html:1225
#: project/templates/_macros.html:1229 project/templates/planning/list.html:97
msgid "Close"
msgstr "Schließen"
#: project/templates/_macros.html:1226
#: project/templates/_macros.html:1230
msgid "Okay"
msgstr "OK"
#: project/templates/_macros.html:1238
#: project/templates/_macros.html:1242
msgid "Choose image file"
msgstr "Bild-Datei auswählen"
#: project/templates/_macros.html:1274 project/templates/event/actions.html:65
#: project/templates/_macros.html:1278 project/templates/event/actions.html:65
#: project/templates/event/delete.html:12
msgid "Edit event"
msgstr "Veranstaltung bearbeiten"
#: project/templates/_macros.html:1278 project/templates/event/actions.html:58
#: project/templates/_macros.html:1282 project/templates/event/actions.html:58
msgid "Duplicate event"
msgstr "Veranstaltung duplizieren"
#: project/templates/_macros.html:1289 project/templates/event/actions.html:44
#: project/templates/_macros.html:1293 project/templates/event/actions.html:44
#: project/templates/manage/events.html:129
msgid "Add to list"
msgstr "Zu Liste hinzufügen"
#: project/templates/_macros.html:1292 project/templates/manage/events.html:132
#: project/templates/_macros.html:1296 project/templates/manage/events.html:132
msgid "More"
msgstr "Mehr"
#: project/templates/_macros.html:1339
#: project/templates/_macros.html:1343
msgid "Please enter a valid time, between 00:00 and 23:59."
msgstr "Bitte gib eine gültige Uhrzeit zwischen 00:00 und 23:59 ein."
#: project/templates/_macros.html:1367
#: project/templates/_macros.html:1371
#, python-format
msgid "Just use %(term)s"
msgstr "Verwende einfach %(term)s"
#: project/templates/_macros.html:1433
#: project/templates/_macros.html:1437
msgid "Event suggestion"
msgstr "Veranstaltungsvorschlag"
#: project/templates/_macros.html:1551
#: project/templates/_macros.html:1555
msgid "Link copied"
msgstr "Link kopiert"
#: project/templates/_macros.html:1551
#: project/templates/_macros.html:1555
msgid "Copy link"
msgstr "Link kopieren"
#: project/templates/_macros.html:1581
#: project/templates/_macros.html:1585
msgid "Google calendar"
msgstr "Google Kalender"
#: project/templates/_macros.html:1583
#: project/templates/_macros.html:1587
msgid "Apple calendar"
msgstr "Apple Kalender"
#: project/templates/_macros.html:1584
#: project/templates/_macros.html:1588
msgid "Yahoo calendar"
msgstr "Yahoo Kalender"
#: project/templates/_macros.html:1585
#: project/templates/_macros.html:1589
msgid "Other calendar"
msgstr "Anderer Kalender"
#: project/templates/_macros.html:1770
#: project/templates/_macros.html:1774
msgid "Remove event date"
msgstr "Termin entfernen"
#: project/templates/_macros.html:1803 project/templates/event/create.html:180
#: project/templates/_macros.html:1807 project/templates/event/create.html:180
#: project/templates/event/update.html:103
#: project/templates/event_date/list.html:446
#: project/templates/widget/event_suggestion/create.html:129
msgid "Enter organizer"
msgstr "Veranstalter eingeben"
#: project/templates/_macros.html:1831
#: project/templates/_macros.html:1835
msgid "Enter list name"
msgstr "Listenname eingeben"
@ -1676,10 +1695,11 @@ msgstr "Listenname eingeben"
msgid "Manage"
msgstr "Verwaltung"
#: project/templates/home.html:37 project/templates/layout.html:173
#: project/templates/home.html:37 project/templates/layout.html:176
#: project/templates/manage/admin_units.html:28
#: project/templates/manage/verification_requests_outgoing.html:13
#: project/templates/manage/verification_requests_outgoing_create_select.html:13
#: project/templates/planning/list.html:68
#: project/templates/security/login_user.html:21
#: project/templates/security/register_user.html:43
msgid "Docs"
@ -1689,7 +1709,7 @@ msgstr "Doku"
msgid "Features"
msgstr "Features"
#: project/templates/layout.html:167 project/templates/layout.html:215
#: project/templates/layout.html:170 project/templates/layout.html:218
#: project/templates/manage/events.html:6
#: project/templates/manage/events.html:54
#: project/templates/manage/events_vue.html:4
@ -1699,18 +1719,18 @@ msgstr "Veranstaltungen"
#: project/templates/admin/admin.html:19
#: project/templates/admin/admin_units.html:4
#: project/templates/admin/admin_units.html:11
#: project/templates/layout.html:168 project/templates/layout.html:181
#: project/templates/layout.html:171 project/templates/layout.html:184
#: project/templates/manage/admin_units.html:3
#: project/templates/manage/admin_units.html:26
#: project/templates/organization/main.html:4
msgid "Organizations"
msgstr "Organisationen"
#: project/templates/layout.html:169
msgid "Planing"
#: project/templates/layout.html:172
msgid "Planning"
msgstr "Planung"
#: project/templates/layout.html:182 project/templates/layout.html:294
#: project/templates/layout.html:185 project/templates/layout.html:297
#: project/templates/oauth2_client/list.html:10
#: project/templates/oauth2_client/read.html:10
#: project/templates/oauth2_token/list.html:10 project/templates/profile.html:4
@ -1723,100 +1743,100 @@ msgstr "Profil"
#: project/templates/admin/email.html:65
#: project/templates/admin/newsletter.html:92
#: project/templates/admin/settings.html:10
#: project/templates/admin/users.html:10 project/templates/layout.html:186
#: project/templates/admin/users.html:10 project/templates/layout.html:189
msgid "Admin"
msgstr "Administration"
#: project/templates/layout.html:190
#: project/templates/layout.html:193
msgid "Logout"
msgstr "Ausloggen"
#: project/templates/layout.html:221
#: project/templates/layout.html:224
msgid "Show events"
msgstr "Veranstaltungen anzeigen"
#: project/templates/event/create.html:5
#: project/templates/event/create.html:225 project/templates/layout.html:222
#: project/templates/event/create.html:225 project/templates/layout.html:225
#: project/templates/manage/events.html:55
#: project/templates/manage/organizers.html:38
msgid "Create event"
msgstr "Veranstaltung erstellen"
#: project/templates/layout.html:223
#: project/templates/layout.html:226
msgid "Import event"
msgstr "Veranstaltung importieren"
#: project/templates/layout.html:225
#: project/templates/layout.html:228
#: project/templates/manage/event_lists.html:4
msgid "Event lists"
msgstr "Veranstaltungslisten"
#: project/templates/layout.html:228
#: project/templates/layout.html:231
msgid "Review suggestions"
msgstr "Vorschläge prüfen"
#: project/templates/layout.html:238
#: project/templates/layout.html:241
#: project/templates/manage/references_incoming.html:5
#: project/templates/manage/references_outgoing.html:5
msgid "References"
msgstr "Empfehlungen"
#: project/templates/layout.html:244
#: project/templates/layout.html:247
#: project/templates/manage/references_incoming.html:9
msgid "Incoming references"
msgstr "Eingehende Empfehlungen"
#: project/templates/layout.html:245
#: project/templates/layout.html:248
#: project/templates/manage/references_outgoing.html:9
msgid "Outgoing references"
msgstr "Ausgehende Empfehlungen"
#: project/templates/layout.html:247
#: project/templates/layout.html:250
#: project/templates/manage/reference_requests_incoming.html:9
msgid "Incoming reference requests"
msgstr "Eingehende Empfehlungsanfragen"
#: project/templates/layout.html:252
#: project/templates/layout.html:255
#: project/templates/manage/reference_requests_outgoing.html:9
msgid "Outgoing reference requests"
msgstr "Ausgehende Empfehlungsanfragen"
#: project/templates/layout.html:264
#: project/templates/layout.html:267
#: project/templates/manage/verification_requests_outgoing.html:5
#: project/templates/manage/verification_requests_outgoing.html:10
msgid "Outgoing verification requests"
msgstr "Ausgehende Verifizierungsanfragen"
#: project/templates/layout.html:268 project/templates/manage/organizers.html:5
#: project/templates/layout.html:271 project/templates/manage/organizers.html:5
#: project/templates/manage/organizers.html:10
#: project/templates/organizer/main.html:4
msgid "Organizers"
msgstr "Veranstalter"
#: project/templates/event_place/list.html:3
#: project/templates/event_place/list.html:7 project/templates/layout.html:269
#: project/templates/event_place/list.html:7 project/templates/layout.html:272
#: project/templates/manage/places.html:5
#: project/templates/manage/places.html:10
msgid "Places"
msgstr "Orte"
#: project/templates/layout.html:271 project/templates/manage/members.html:5
#: project/templates/layout.html:274 project/templates/manage/members.html:5
#: project/templates/manage/members.html:28
#: project/templates/verification_request/review.html:54
msgid "Members"
msgstr "Mitglieder"
#: project/templates/layout.html:272 project/templates/manage/relations.html:4
#: project/templates/layout.html:275 project/templates/manage/relations.html:4
msgid "Relations"
msgstr "Beziehungen"
#: project/templates/layout.html:276
#: project/templates/layout.html:279
#: project/templates/manage/verification_requests_incoming.html:5
#: project/templates/manage/verification_requests_incoming.html:9
msgid "Incoming verification requests"
msgstr "Eingehende Verifizierungsanfragen"
#: project/templates/layout.html:284
#: project/templates/layout.html:287
#: project/templates/manage/admin_units.html:17
#: project/templates/manage/organization_invitations.html:4
#: project/templates/user/organization_invitations.html:4
@ -1828,33 +1848,33 @@ msgstr "Organisationseinladungen"
#: project/templates/admin/settings.html:11
#: project/templates/admin_unit/update.html:6
#: project/templates/admin_unit/update.html:30
#: project/templates/layout.html:288 project/templates/manage/widgets.html:11
#: project/templates/layout.html:291 project/templates/manage/widgets.html:11
#: project/templates/manage/widgets.html:15 project/templates/profile.html:32
msgid "Settings"
msgstr "Einstellungen"
#: project/templates/layout.html:289 project/templates/manage/export.html:3
#: project/templates/layout.html:292 project/templates/manage/export.html:3
#: project/templates/manage/export.html:63
msgid "Export"
msgstr "Export"
#: project/templates/layout.html:291
#: project/templates/layout.html:294
#: project/templates/manage/custom_widgets.html:13
msgid "Custom widgets"
msgstr "Custom widgets"
#: project/templates/layout.html:292 project/templates/manage/reviews.html:10
#: project/templates/layout.html:295 project/templates/manage/reviews.html:10
#: project/templates/manage/widgets.html:5
#: project/templates/manage/widgets.html:9
msgid "Widgets"
msgstr "Widgets"
#: project/templates/layout.html:304
#: project/templates/layout.html:307
msgid "Switch organization"
msgstr "Organisation wechseln"
#: project/templates/developer/read.html:4
#: project/templates/developer/read.html:8 project/templates/layout.html:351
#: project/templates/developer/read.html:8 project/templates/layout.html:354
#: project/templates/profile.html:45
msgid "Developer"
msgstr "Entwickler"
@ -2472,11 +2492,15 @@ msgstr "Aktiv"
msgid "Revoke"
msgstr "Widerrufen"
#: project/templates/planing/list.html:5
#: project/templates/planing/list.html:105
msgid "Event Planing"
#: project/templates/planning/list.html:5
#: project/templates/planning/list.html:66
msgid "Event Planning"
msgstr "Planungsassistent"
#: project/templates/planning/list.html:76
msgid "Filters"
msgstr "Filter"
#: project/templates/reference/read.html:4
#: project/templates/reference/read.html:8
#: project/templates/reference/read.html:29
@ -2693,19 +2717,23 @@ msgstr "Veranstaltung erfolgreich veröffentlicht"
msgid "Draft successfully saved"
msgstr "Entwurf erfolgreich gespeichert"
#: project/views/event.py:226
#: project/views/event.py:185
msgid "Event successfully planned"
msgstr "Veranstaltung erfolgreich geplant"
#: project/views/event.py:228
msgid "Event successfully updated"
msgstr "Veranstaltung erfolgreich aktualisiert"
#: project/views/event.py:252
#: project/views/event.py:254
msgid "Event successfully deleted"
msgstr "Veranstaltung erfolgreich gelöscht"
#: project/views/event.py:417
#: project/views/event.py:419
msgid "Referenced event changed"
msgstr "Empfohlene Veranstaltung wurde geändert"
#: project/views/event.py:440
#: project/views/event.py:442
msgid "New event report"
msgstr "Neue Meldung zu einer Veranstaltung"
@ -3021,3 +3049,6 @@ msgstr "Neue Veranstaltung zu prüfen"
#~ msgid "Short name"
#~ msgstr "Kurzname"
#~ msgid "Select the public status of the event."
#~ msgstr "Wähle den öffentlichen Status der Veranstaltung."

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2023-06-02 12:16+0200\n"
"POT-Creation-Date: 2023-06-09 13:32+0200\n"
"PO-Revision-Date: 2021-04-30 15:04+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
@ -203,24 +203,24 @@ msgstr ""
msgid "You have received an invitation"
msgstr ""
#: project/forms/admin.py:11 project/templates/layout.html:334
#: project/forms/admin.py:11 project/templates/layout.html:337
#: project/views/root.py:55
msgid "Terms of service"
msgstr ""
#: project/forms/admin.py:12 project/templates/layout.html:339
#: project/forms/admin.py:12 project/templates/layout.html:342
#: project/views/root.py:67
msgid "Legal notice"
msgstr ""
#: project/forms/admin.py:13 project/templates/_macros.html:1461
#: project/templates/layout.html:343
#: project/forms/admin.py:13 project/templates/_macros.html:1465
#: project/templates/layout.html:346
#: project/templates/widget/event_suggestion/create.html:204
#: project/views/admin_unit.py:83 project/views/root.py:75
msgid "Contact"
msgstr ""
#: project/forms/admin.py:14 project/templates/layout.html:347
#: project/forms/admin.py:14 project/templates/layout.html:350
#: project/views/root.py:83
msgid "Privacy"
msgstr ""
@ -261,7 +261,7 @@ msgstr ""
#: project/forms/admin_unit_member.py:30 project/forms/event.py:107
#: project/forms/event_suggestion.py:38 project/forms/organizer.py:33
#: project/forms/user.py:18 project/forms/user.py:23
#: project/templates/_macros.html:246 project/templates/_macros.html:1557
#: project/templates/_macros.html:246 project/templates/_macros.html:1561
#: project/templates/admin/admin.html:27 project/templates/admin/email.html:4
#: project/templates/admin/email.html:66 project/templates/admin/users.html:19
#: project/templates/manage/organizers.html:21
@ -366,9 +366,9 @@ msgstr ""
msgid "Street"
msgstr ""
#: project/forms/admin_unit.py:18 project/forms/event.py:453
#: project/forms/admin_unit.py:18 project/forms/event.py:461
#: project/forms/event_date.py:52 project/forms/event_place.py:16
#: project/forms/organizer.py:16
#: project/forms/organizer.py:16 project/forms/planning.py:44
msgid "Postal code"
msgstr ""
@ -408,7 +408,7 @@ msgstr ""
msgid "The short name is used to create a unique identifier for your events"
msgstr ""
#: project/forms/admin_unit.py:48 project/templates/_macros.html:1599
#: project/forms/admin_unit.py:48 project/templates/_macros.html:1603
msgid "Short name must contain only letters numbers or underscore"
msgstr ""
@ -429,13 +429,13 @@ msgstr ""
#: project/forms/admin_unit.py:61 project/forms/event.py:108
#: project/forms/event_suggestion.py:31 project/forms/organizer.py:34
#: project/templates/_macros.html:305
#: project/templates/_macros.html:309
#: project/templates/manage/organizers.html:20
msgid "Phone"
msgstr ""
#: project/forms/admin_unit.py:62 project/forms/event.py:109
#: project/forms/organizer.py:35 project/templates/_macros.html:313
#: project/forms/organizer.py:35 project/templates/_macros.html:317
msgid "Fax"
msgstr ""
@ -520,7 +520,7 @@ msgstr ""
msgid "Cancel deletion"
msgstr ""
#: project/forms/admin_unit.py:158 project/templates/layout.html:305
#: project/forms/admin_unit.py:158 project/templates/layout.html:308
#: project/templates/manage/delete_membership.html:6
msgid "Leave organization"
msgstr ""
@ -654,20 +654,20 @@ msgid ""
"days."
msgstr ""
#: project/forms/event.py:50 project/templates/planing/list.html:75
#: project/forms/event.py:50
msgid "All-day"
msgstr ""
#: project/forms/event.py:54 project/templates/_macros.html:1769
#: project/forms/event.py:54 project/templates/_macros.html:1773
#: project/templates/widget/event_suggestion/create.html:240
msgid "Recurring event"
msgstr ""
#: project/forms/event.py:61 project/templates/_macros.html:1318
#: project/forms/event.py:61 project/templates/_macros.html:1322
msgid "The start must be before the end."
msgstr ""
#: project/forms/event.py:67 project/templates/_macros.html:1335
#: project/forms/event.py:67 project/templates/_macros.html:1339
msgid "An event can last a maximum of 14 days."
msgstr ""
@ -748,7 +748,7 @@ msgid "If the participants needs to register for the event."
msgstr ""
#: project/forms/event.py:170 project/templates/_macros.html:260
#: project/templates/layout.html:115
#: project/templates/layout.html:118
msgid "Booked up"
msgstr ""
@ -804,11 +804,11 @@ msgstr ""
msgid "EventAttendanceMode.offline"
msgstr "Normal (Offline)"
#: project/forms/event.py:217 project/templates/layout.html:103
#: project/forms/event.py:217 project/templates/layout.html:106
msgid "EventAttendanceMode.online"
msgstr "Online"
#: project/forms/event.py:219 project/templates/layout.html:106
#: project/forms/event.py:219 project/templates/layout.html:109
msgid "EventAttendanceMode.mixed"
msgstr "Online and offline"
@ -831,8 +831,8 @@ msgid ""
" course it works without it."
msgstr ""
#: project/forms/event.py:242 project/templates/_macros.html:418
#: project/templates/_macros.html:581
#: project/forms/event.py:242 project/templates/_macros.html:422
#: project/templates/_macros.html:585
msgid "Previous start date"
msgstr ""
@ -877,9 +877,9 @@ msgid "Invalid co-organizer."
msgstr ""
#: project/forms/event.py:286 project/forms/event.py:295
#: project/forms/event.py:368 project/forms/event.py:442
#: project/forms/event_suggestion.py:50 project/templates/_macros.html:458
#: project/templates/_macros.html:624 project/templates/event/create.html:288
#: project/forms/event.py:373 project/forms/event.py:450
#: project/forms/event_suggestion.py:50 project/templates/_macros.html:462
#: project/templates/_macros.html:628 project/templates/event/create.html:288
#: project/templates/event/update.html:170
#: project/templates/event_place/create.html:31
#: project/templates/event_place/delete.html:13
@ -897,9 +897,9 @@ msgid "Enter new place"
msgstr ""
#: project/forms/event.py:302 project/forms/event.py:311
#: project/forms/event.py:376 project/forms/event.py:439
#: project/forms/event.py:381 project/forms/event.py:447
#: project/forms/event_date.py:40 project/forms/event_suggestion.py:60
#: project/templates/_macros.html:495 project/templates/_macros.html:667
#: project/templates/_macros.html:499 project/templates/_macros.html:671
#: project/templates/event/create.html:257
#: project/templates/event/update.html:160
#: project/templates/manage/events.html:104
@ -922,110 +922,118 @@ msgid "Save as draft"
msgstr ""
#: project/forms/event.py:318
msgid "Save as planned"
msgstr ""
#: project/forms/event.py:319
msgid "Publish event"
msgstr ""
#: project/forms/event.py:350
#: project/forms/event.py:355
msgid "Select existing place or enter new place"
msgstr ""
#: project/forms/event.py:358
#: project/forms/event.py:363
msgid "Select existing organizer or enter new organizer"
msgstr ""
#: project/forms/event.py:371
#: project/forms/event.py:376
msgid ""
"Choose where the event takes place. You can add and modify places at "
"Organization > Places."
msgstr ""
#: project/forms/event.py:379
#: project/forms/event.py:384
msgid ""
"Select the organizer. You can add and modify organizers at Organization >"
" Organizers."
msgstr ""
#: project/forms/event.py:385 project/templates/event/update.html:149
#: project/forms/event.py:390 project/templates/event/update.html:149
#: project/templates/oauth2_token/list.html:21
msgid "Status"
msgstr ""
#: project/forms/event.py:388
#: project/forms/event.py:393
msgid "EventStatus.scheduled"
msgstr "Scheduled"
#: project/forms/event.py:389 project/templates/layout.html:69
#: project/templates/layout.html:84
#: project/forms/event.py:394 project/templates/layout.html:72
#: project/templates/layout.html:87
msgid "EventStatus.cancelled"
msgstr "Cancelled"
#: project/forms/event.py:390 project/templates/layout.html:72
#: project/templates/layout.html:87
#: project/forms/event.py:395 project/templates/layout.html:75
#: project/templates/layout.html:90
msgid "EventStatus.movedOnline"
msgstr "Moved online"
#: project/forms/event.py:391 project/templates/layout.html:75
#: project/templates/layout.html:90
#: project/forms/event.py:396 project/templates/layout.html:78
#: project/templates/layout.html:93
msgid "EventStatus.postponed"
msgstr "Postponed"
#: project/forms/event.py:392 project/templates/layout.html:78
#: project/templates/layout.html:93
#: project/forms/event.py:397 project/templates/layout.html:81
#: project/templates/layout.html:96
msgid "EventStatus.rescheduled"
msgstr "Rescheduled"
#: project/forms/event.py:394
#: project/forms/event.py:399
msgid "Select the status of the event."
msgstr ""
#: project/forms/event.py:398
#: project/forms/event.py:403
msgid "Public status"
msgstr ""
#: project/forms/event.py:401
#: project/forms/event.py:406
msgid "PublicStatus.published"
msgstr ""
#: project/forms/event.py:402 project/templates/_macros.html:266
#: project/forms/event.py:407 project/templates/_macros.html:269
msgid "PublicStatus.planned"
msgstr ""
#: project/forms/event.py:408 project/templates/_macros.html:267
msgid "PublicStatus.draft"
msgstr ""
#: project/forms/event.py:404
msgid "Select the public status of the event."
#: project/forms/event.py:410 project/templates/event/create.html:371
msgid "Planned events appear in the scheduling view, but not on public calendars."
msgstr ""
#: project/forms/event.py:407 project/templates/event/update.html:5
#: project/forms/event.py:415 project/templates/event/update.html:5
#: project/templates/event/update.html:117
msgid "Update event"
msgstr ""
#: project/forms/event.py:423 project/templates/_macros.html:1275
#: project/forms/event.py:431 project/templates/_macros.html:1279
#: project/templates/event/actions.html:66
#: project/templates/event/delete.html:6
msgid "Delete event"
msgstr ""
#: project/forms/event.py:430 project/forms/event_date.py:14
#: project/forms/planing.py:14
#: project/forms/event.py:438 project/forms/event_date.py:14
#: project/forms/planning.py:21
msgid "From"
msgstr ""
#: project/forms/event.py:432 project/forms/event_date.py:16
#: project/forms/planing.py:16
#: project/forms/event.py:440 project/forms/event_date.py:16
#: project/forms/planning.py:22
msgid "to"
msgstr ""
#: project/forms/event.py:434 project/forms/event_date.py:18
#: project/forms/event.py:442 project/forms/event_date.py:18
msgid "Keyword"
msgstr ""
#: project/forms/event.py:436 project/forms/event_date.py:20
#: project/forms/planing.py:19 project/templates/_macros.html:391
#: project/forms/event.py:444 project/forms/event_date.py:20
#: project/forms/planning.py:24 project/templates/_macros.html:395
msgid "Category"
msgstr ""
#: project/forms/event.py:446 project/forms/event_date.py:26
#: project/forms/planing.py:22 project/templates/_macros.html:320
#: project/forms/event.py:454 project/forms/event_date.py:26
#: project/forms/planning.py:27 project/templates/_macros.html:324
#: project/templates/admin_unit/create.html:39
#: project/templates/admin_unit/update.html:47
#: project/templates/event_place/create.html:40
@ -1037,28 +1045,29 @@ msgstr ""
msgid "Location"
msgstr ""
#: project/forms/event.py:448 project/forms/event_date.py:28
#: project/forms/planing.py:24
#: project/forms/event.py:456 project/forms/event_date.py:28
#: project/forms/planning.py:29
msgid "Distance"
msgstr ""
#: project/forms/event.py:455 project/forms/event_date.py:49
#: project/forms/event.py:463 project/forms/event_date.py:49
#: project/forms/planning.py:41
msgid "Exclude recurring events"
msgstr ""
#: project/forms/event.py:459 project/forms/event_date.py:54
#: project/forms/event.py:467 project/forms/event_date.py:54
msgid "Find events"
msgstr ""
#: project/forms/event_date.py:35 project/forms/reference.py:11
#: project/forms/reference_request.py:16 project/templates/_macros.html:511
#: project/templates/_macros.html:684
#: project/forms/reference_request.py:16 project/templates/_macros.html:515
#: project/templates/_macros.html:688
#: project/templates/admin/delete_admin_unit.html:13
#: project/templates/admin_unit/cancel_deletion.html:13
#: project/templates/admin_unit/create.html:28
#: project/templates/admin_unit/request_deletion.html:15
#: project/templates/admin_unit/update.html:36
#: project/templates/layout.html:257
#: project/templates/layout.html:260
#: project/templates/manage/delete_membership.html:13
#: project/templates/verification_request/delete.html:13
#: project/templates/verification_request/review.html:28
@ -1069,7 +1078,7 @@ msgstr ""
msgid "Show unreferenced events only"
msgstr ""
#: project/forms/event_date.py:63 project/forms/planing.py:36
#: project/forms/event_date.py:63
#: project/templates/widget/event_date/list.html:82
msgid "Find"
msgstr ""
@ -1194,10 +1203,18 @@ msgstr ""
msgid "Delete organizer"
msgstr ""
#: project/forms/planing.py:30
#: project/forms/planning.py:35
msgid "Weekdays"
msgstr ""
#: project/forms/planning.py:46
msgid "Min. expected number of participants"
msgstr ""
#: project/forms/planning.py:50 project/templates/planning/list.html:98
msgid "Refresh"
msgstr ""
#: project/forms/reference.py:22
msgid "Save reference"
msgstr ""
@ -1223,7 +1240,7 @@ msgid "Delete request"
msgstr ""
#: project/forms/reference_request.py:28
#: project/forms/verification_request.py:24 project/templates/_macros.html:1473
#: project/forms/verification_request.py:24 project/templates/_macros.html:1477
#: project/templates/event_suggestion/review_status.html:18
#: project/templates/reference_request/review_status.html:12
#: project/templates/verification_request/review_status.html:4
@ -1373,31 +1390,31 @@ msgstr ""
msgid "Link"
msgstr ""
#: project/templates/_macros.html:299
#: project/templates/_macros.html:303
msgid "Verified"
msgstr ""
#: project/templates/_macros.html:368
#: project/templates/_macros.html:372
#, python-format
msgid "Created at %(created_at)s by %(created_by)s."
msgstr ""
#: project/templates/_macros.html:370
#: project/templates/_macros.html:374
#, python-format
msgid "Created at %(created_at)s."
msgstr ""
#: project/templates/_macros.html:375
#: project/templates/_macros.html:379
#, python-format
msgid "Last updated at %(updated_at)s by %(updated_by)s."
msgstr ""
#: project/templates/_macros.html:377
#: project/templates/_macros.html:381
#, python-format
msgid "Last updated at %(updated_at)s."
msgstr ""
#: project/templates/_macros.html:407 project/templates/_macros.html:577
#: project/templates/_macros.html:411 project/templates/_macros.html:581
#: project/templates/event/actions.html:25
#: project/templates/event/create.html:234
#: project/templates/event/update.html:126
@ -1406,44 +1423,44 @@ msgstr ""
msgid "Event"
msgstr ""
#: project/templates/_macros.html:413 project/templates/_macros.html:999
#: project/templates/_macros.html:417 project/templates/_macros.html:1003
msgid "Date"
msgstr ""
#: project/templates/_macros.html:440 project/templates/_macros.html:599
#: project/templates/_macros.html:1542 project/templates/event/actions.html:51
#: project/templates/_macros.html:444 project/templates/_macros.html:603
#: project/templates/_macros.html:1546 project/templates/event/actions.html:51
msgid "Share"
msgstr ""
#: project/templates/_macros.html:444 project/templates/_macros.html:603
#: project/templates/_macros.html:1572
#: project/templates/_macros.html:448 project/templates/_macros.html:607
#: project/templates/_macros.html:1576
msgid "Add to calendar"
msgstr ""
#: project/templates/_macros.html:452 project/templates/_macros.html:617
#: project/templates/_macros.html:456 project/templates/_macros.html:621
#: project/templates/event/report.html:4
msgid "Report event"
msgstr ""
#: project/templates/_macros.html:479 project/templates/_macros.html:650
#: project/templates/_macros.html:483 project/templates/_macros.html:654
msgid "Show directions"
msgstr ""
#: project/templates/_macros.html:484 project/templates/_macros.html:642
#: project/templates/_macros.html:488 project/templates/_macros.html:646
msgid "The event takes place online."
msgstr ""
#: project/templates/_macros.html:486 project/templates/_macros.html:644
#: project/templates/_macros.html:490 project/templates/_macros.html:648
msgid "The event takes place both offline and online."
msgstr ""
#: project/templates/_macros.html:607 project/templates/layout.html:183
#: project/templates/_macros.html:611 project/templates/layout.html:186
#: project/templates/user/favorite_events.html:4
msgid "Favorite events"
msgstr ""
#: project/templates/_macros.html:610 project/templates/_macros.html:653
#: project/templates/_macros.html:785
#: project/templates/_macros.html:614 project/templates/_macros.html:657
#: project/templates/_macros.html:789
#: project/templates/admin/admin_units.html:36
#: project/templates/admin/users.html:36
#: project/templates/manage/events.html:118
@ -1456,11 +1473,11 @@ msgstr ""
msgid "Edit"
msgstr ""
#: project/templates/_macros.html:711
#: project/templates/_macros.html:715
msgid "Referenced by"
msgstr ""
#: project/templates/_macros.html:723 project/templates/_macros.html:1285
#: project/templates/_macros.html:727 project/templates/_macros.html:1289
#: project/templates/event/actions.html:38
#: project/templates/event_date/list.html:251
#: project/templates/manage/events.html:125
@ -1468,39 +1485,39 @@ msgstr ""
msgid "Reference event"
msgstr ""
#: project/templates/_macros.html:732
#: project/templates/_macros.html:736
#: project/templates/manage/reference_requests_incoming.html:5
#: project/templates/manage/reference_requests_outgoing.html:5
msgid "Reference requests"
msgstr ""
#: project/templates/_macros.html:743 project/templates/_macros.html:1282
#: project/templates/_macros.html:747 project/templates/_macros.html:1286
#: project/templates/event/actions.html:32
#: project/templates/manage/events.html:123
msgid "Request reference"
msgstr ""
#: project/templates/_macros.html:751 project/templates/event_date/list.html:6
#: project/templates/_macros.html:755 project/templates/event_date/list.html:6
#: project/templates/event_date/list.html:461
#: project/templates/reference_request/review.html:32
msgid "Event Dates"
msgstr ""
#: project/templates/_macros.html:849
#: project/templates/_macros.html:853
msgid "Search location on Google"
msgstr ""
#: project/templates/_macros.html:916
#: project/templates/_macros.html:920
#, python-format
msgid "%(count)d event dates"
msgstr ""
#: project/templates/_macros.html:939 project/templates/_macros.html:941
#: project/templates/_macros.html:943 project/templates/_macros.html:945
#: project/templates/event_date/list.html:510
msgid "First"
msgstr ""
#: project/templates/_macros.html:944 project/templates/_macros.html:946
#: project/templates/_macros.html:948 project/templates/_macros.html:950
#: project/templates/event_date/list.html:511
#: project/templates/widget/event_suggestion/create.html:193
#: project/templates/widget/event_suggestion/create.html:218
@ -1511,12 +1528,12 @@ msgstr ""
msgid "Previous"
msgstr ""
#: project/templates/_macros.html:948
#: project/templates/_macros.html:952
#, python-format
msgid "Page %(page)d of %(pages)d (%(total)d total)"
msgstr ""
#: project/templates/_macros.html:950 project/templates/_macros.html:952
#: project/templates/_macros.html:954 project/templates/_macros.html:956
#: project/templates/event_date/list.html:513
#: project/templates/widget/event_suggestion/create.html:194
#: project/templates/widget/event_suggestion/create.html:219
@ -1526,98 +1543,98 @@ msgstr ""
msgid "Next"
msgstr ""
#: project/templates/_macros.html:955 project/templates/_macros.html:957
#: project/templates/_macros.html:959 project/templates/_macros.html:961
#: project/templates/event_date/list.html:514
msgid "Last"
msgstr ""
#: project/templates/_macros.html:1022
#: project/templates/_macros.html:1026
msgid "Radius"
msgstr ""
#: project/templates/_macros.html:1204
#: project/templates/_macros.html:1208
msgid "Edit image"
msgstr ""
#: project/templates/_macros.html:1225
#: project/templates/_macros.html:1229 project/templates/planning/list.html:97
msgid "Close"
msgstr ""
#: project/templates/_macros.html:1226
#: project/templates/_macros.html:1230
msgid "Okay"
msgstr ""
#: project/templates/_macros.html:1238
#: project/templates/_macros.html:1242
msgid "Choose image file"
msgstr ""
#: project/templates/_macros.html:1274 project/templates/event/actions.html:65
#: project/templates/_macros.html:1278 project/templates/event/actions.html:65
#: project/templates/event/delete.html:12
msgid "Edit event"
msgstr ""
#: project/templates/_macros.html:1278 project/templates/event/actions.html:58
#: project/templates/_macros.html:1282 project/templates/event/actions.html:58
msgid "Duplicate event"
msgstr ""
#: project/templates/_macros.html:1289 project/templates/event/actions.html:44
#: project/templates/_macros.html:1293 project/templates/event/actions.html:44
#: project/templates/manage/events.html:129
msgid "Add to list"
msgstr ""
#: project/templates/_macros.html:1292 project/templates/manage/events.html:132
#: project/templates/_macros.html:1296 project/templates/manage/events.html:132
msgid "More"
msgstr ""
#: project/templates/_macros.html:1339
#: project/templates/_macros.html:1343
msgid "Please enter a valid time, between 00:00 and 23:59."
msgstr ""
#: project/templates/_macros.html:1367
#: project/templates/_macros.html:1371
#, python-format
msgid "Just use %(term)s"
msgstr ""
#: project/templates/_macros.html:1433
#: project/templates/_macros.html:1437
msgid "Event suggestion"
msgstr ""
#: project/templates/_macros.html:1551
#: project/templates/_macros.html:1555
msgid "Link copied"
msgstr ""
#: project/templates/_macros.html:1551
#: project/templates/_macros.html:1555
msgid "Copy link"
msgstr ""
#: project/templates/_macros.html:1581
#: project/templates/_macros.html:1585
msgid "Google calendar"
msgstr ""
#: project/templates/_macros.html:1583
#: project/templates/_macros.html:1587
msgid "Apple calendar"
msgstr ""
#: project/templates/_macros.html:1584
#: project/templates/_macros.html:1588
msgid "Yahoo calendar"
msgstr ""
#: project/templates/_macros.html:1585
#: project/templates/_macros.html:1589
msgid "Other calendar"
msgstr ""
#: project/templates/_macros.html:1770
#: project/templates/_macros.html:1774
msgid "Remove event date"
msgstr ""
#: project/templates/_macros.html:1803 project/templates/event/create.html:180
#: project/templates/_macros.html:1807 project/templates/event/create.html:180
#: project/templates/event/update.html:103
#: project/templates/event_date/list.html:446
#: project/templates/widget/event_suggestion/create.html:129
msgid "Enter organizer"
msgstr ""
#: project/templates/_macros.html:1831
#: project/templates/_macros.html:1835
msgid "Enter list name"
msgstr ""
@ -1625,10 +1642,11 @@ msgstr ""
msgid "Manage"
msgstr ""
#: project/templates/home.html:37 project/templates/layout.html:173
#: project/templates/home.html:37 project/templates/layout.html:176
#: project/templates/manage/admin_units.html:28
#: project/templates/manage/verification_requests_outgoing.html:13
#: project/templates/manage/verification_requests_outgoing_create_select.html:13
#: project/templates/planning/list.html:68
#: project/templates/security/login_user.html:21
#: project/templates/security/register_user.html:43
msgid "Docs"
@ -1638,7 +1656,7 @@ msgstr ""
msgid "Features"
msgstr ""
#: project/templates/layout.html:167 project/templates/layout.html:215
#: project/templates/layout.html:170 project/templates/layout.html:218
#: project/templates/manage/events.html:6
#: project/templates/manage/events.html:54
#: project/templates/manage/events_vue.html:4
@ -1648,18 +1666,18 @@ msgstr ""
#: project/templates/admin/admin.html:19
#: project/templates/admin/admin_units.html:4
#: project/templates/admin/admin_units.html:11
#: project/templates/layout.html:168 project/templates/layout.html:181
#: project/templates/layout.html:171 project/templates/layout.html:184
#: project/templates/manage/admin_units.html:3
#: project/templates/manage/admin_units.html:26
#: project/templates/organization/main.html:4
msgid "Organizations"
msgstr ""
#: project/templates/layout.html:169
msgid "Planing"
#: project/templates/layout.html:172
msgid "Planning"
msgstr ""
#: project/templates/layout.html:182 project/templates/layout.html:294
#: project/templates/layout.html:185 project/templates/layout.html:297
#: project/templates/oauth2_client/list.html:10
#: project/templates/oauth2_client/read.html:10
#: project/templates/oauth2_token/list.html:10 project/templates/profile.html:4
@ -1672,100 +1690,100 @@ msgstr ""
#: project/templates/admin/email.html:65
#: project/templates/admin/newsletter.html:92
#: project/templates/admin/settings.html:10
#: project/templates/admin/users.html:10 project/templates/layout.html:186
#: project/templates/admin/users.html:10 project/templates/layout.html:189
msgid "Admin"
msgstr ""
#: project/templates/layout.html:190
#: project/templates/layout.html:193
msgid "Logout"
msgstr ""
#: project/templates/layout.html:221
#: project/templates/layout.html:224
msgid "Show events"
msgstr ""
#: project/templates/event/create.html:5
#: project/templates/event/create.html:225 project/templates/layout.html:222
#: project/templates/event/create.html:225 project/templates/layout.html:225
#: project/templates/manage/events.html:55
#: project/templates/manage/organizers.html:38
msgid "Create event"
msgstr ""
#: project/templates/layout.html:223
#: project/templates/layout.html:226
msgid "Import event"
msgstr ""
#: project/templates/layout.html:225
#: project/templates/layout.html:228
#: project/templates/manage/event_lists.html:4
msgid "Event lists"
msgstr ""
#: project/templates/layout.html:228
#: project/templates/layout.html:231
msgid "Review suggestions"
msgstr ""
#: project/templates/layout.html:238
#: project/templates/layout.html:241
#: project/templates/manage/references_incoming.html:5
#: project/templates/manage/references_outgoing.html:5
msgid "References"
msgstr ""
#: project/templates/layout.html:244
#: project/templates/layout.html:247
#: project/templates/manage/references_incoming.html:9
msgid "Incoming references"
msgstr ""
#: project/templates/layout.html:245
#: project/templates/layout.html:248
#: project/templates/manage/references_outgoing.html:9
msgid "Outgoing references"
msgstr ""
#: project/templates/layout.html:247
#: project/templates/layout.html:250
#: project/templates/manage/reference_requests_incoming.html:9
msgid "Incoming reference requests"
msgstr ""
#: project/templates/layout.html:252
#: project/templates/layout.html:255
#: project/templates/manage/reference_requests_outgoing.html:9
msgid "Outgoing reference requests"
msgstr ""
#: project/templates/layout.html:264
#: project/templates/layout.html:267
#: project/templates/manage/verification_requests_outgoing.html:5
#: project/templates/manage/verification_requests_outgoing.html:10
msgid "Outgoing verification requests"
msgstr ""
#: project/templates/layout.html:268 project/templates/manage/organizers.html:5
#: project/templates/layout.html:271 project/templates/manage/organizers.html:5
#: project/templates/manage/organizers.html:10
#: project/templates/organizer/main.html:4
msgid "Organizers"
msgstr ""
#: project/templates/event_place/list.html:3
#: project/templates/event_place/list.html:7 project/templates/layout.html:269
#: project/templates/event_place/list.html:7 project/templates/layout.html:272
#: project/templates/manage/places.html:5
#: project/templates/manage/places.html:10
msgid "Places"
msgstr ""
#: project/templates/layout.html:271 project/templates/manage/members.html:5
#: project/templates/layout.html:274 project/templates/manage/members.html:5
#: project/templates/manage/members.html:28
#: project/templates/verification_request/review.html:54
msgid "Members"
msgstr ""
#: project/templates/layout.html:272 project/templates/manage/relations.html:4
#: project/templates/layout.html:275 project/templates/manage/relations.html:4
msgid "Relations"
msgstr ""
#: project/templates/layout.html:276
#: project/templates/layout.html:279
#: project/templates/manage/verification_requests_incoming.html:5
#: project/templates/manage/verification_requests_incoming.html:9
msgid "Incoming verification requests"
msgstr ""
#: project/templates/layout.html:284
#: project/templates/layout.html:287
#: project/templates/manage/admin_units.html:17
#: project/templates/manage/organization_invitations.html:4
#: project/templates/user/organization_invitations.html:4
@ -1777,33 +1795,33 @@ msgstr ""
#: project/templates/admin/settings.html:11
#: project/templates/admin_unit/update.html:6
#: project/templates/admin_unit/update.html:30
#: project/templates/layout.html:288 project/templates/manage/widgets.html:11
#: project/templates/layout.html:291 project/templates/manage/widgets.html:11
#: project/templates/manage/widgets.html:15 project/templates/profile.html:32
msgid "Settings"
msgstr ""
#: project/templates/layout.html:289 project/templates/manage/export.html:3
#: project/templates/layout.html:292 project/templates/manage/export.html:3
#: project/templates/manage/export.html:63
msgid "Export"
msgstr ""
#: project/templates/layout.html:291
#: project/templates/layout.html:294
#: project/templates/manage/custom_widgets.html:13
msgid "Custom widgets"
msgstr ""
#: project/templates/layout.html:292 project/templates/manage/reviews.html:10
#: project/templates/layout.html:295 project/templates/manage/reviews.html:10
#: project/templates/manage/widgets.html:5
#: project/templates/manage/widgets.html:9
msgid "Widgets"
msgstr ""
#: project/templates/layout.html:304
#: project/templates/layout.html:307
msgid "Switch organization"
msgstr ""
#: project/templates/developer/read.html:4
#: project/templates/developer/read.html:8 project/templates/layout.html:351
#: project/templates/developer/read.html:8 project/templates/layout.html:354
#: project/templates/profile.html:45
msgid "Developer"
msgstr ""
@ -2408,9 +2426,13 @@ msgstr ""
msgid "Revoke"
msgstr ""
#: project/templates/planing/list.html:5
#: project/templates/planing/list.html:105
msgid "Event Planing"
#: project/templates/planning/list.html:5
#: project/templates/planning/list.html:66
msgid "Event Planning"
msgstr ""
#: project/templates/planning/list.html:76
msgid "Filters"
msgstr ""
#: project/templates/reference/read.html:4
@ -2624,19 +2646,23 @@ msgstr ""
msgid "Draft successfully saved"
msgstr ""
#: project/views/event.py:226
#: project/views/event.py:185
msgid "Event successfully planned"
msgstr ""
#: project/views/event.py:228
msgid "Event successfully updated"
msgstr ""
#: project/views/event.py:252
#: project/views/event.py:254
msgid "Event successfully deleted"
msgstr ""
#: project/views/event.py:417
#: project/views/event.py:419
msgid "Referenced event changed"
msgstr ""
#: project/views/event.py:440
#: project/views/event.py:442
msgid "New event report"
msgstr ""
@ -2931,3 +2957,6 @@ msgstr ""
#~ msgid "Short name"
#~ msgstr ""
#~ msgid "Select the public status of the event."
#~ msgstr ""

View File

@ -181,6 +181,8 @@ def event_create_for_admin_unit_id(id):
gettext("Event successfully published")
if event.public_status == PublicStatus.published
else gettext("Draft successfully saved")
if event.public_status == PublicStatus.draft
else gettext("Event successfully planned")
)
flash_message(
success_msg,

View File

@ -1,22 +0,0 @@
from flask import render_template, request
from project import app
from project.forms.planing import PlaningForm
from project.services.event_search import EventSearchParams
from project.views.event import get_event_category_choices
def prepare_event_date_form(form):
form.category_id.choices = get_event_category_choices()
form.category_id.choices.insert(0, (0, ""))
@app.route("/planing")
def planing():
params = EventSearchParams()
params.set_planing_date_range()
form = PlaningForm(formdata=request.args, obj=params)
prepare_event_date_form(form)
return render_template("planing/list.html", form=form, params=params)

27
project/views/planning.py Normal file
View File

@ -0,0 +1,27 @@
from flask import render_template, request, url_for
from flask_security import auth_required
from project import app
from project.access import can_use_planning
from project.forms.planning import PlanningForm
from project.services.event_search import EventSearchParams
from project.views.event import get_event_category_choices
from project.views.utils import permission_missing
@app.route("/planning")
@auth_required()
def planning():
if not can_use_planning():
return permission_missing(url_for("manage_admin_units"))
params = EventSearchParams()
params.set_planning_date_range()
form = PlanningForm(formdata=request.args, obj=params)
form.category_id.choices = get_event_category_choices()
form.category_id.data = [c[0] for c in form.category_id.choices]
form.weekday.data = [c[0] for c in form.weekday.choices]
form.exclude_recurring.data = True
return render_template("planning/list.html", form=form, params=params)

View File

@ -19,9 +19,16 @@ def test_read(client, seeder: Seeder, utils: UtilActions):
response = utils.get_json(unverified_url)
utils.assert_response_unauthorized(response)
seeder.create_event(admin_unit_id, planned=True)
planned_url = utils.get_url("api_v1_event_date", id=4)
response = utils.get_json(planned_url)
utils.assert_response_unauthorized(response)
seeder.authorize_api_access(user_id, admin_unit_id)
response = utils.get_json(draft_url)
utils.assert_response_ok(response)
response = utils.get_json(planned_url)
utils.assert_response_ok(response)
def test_read_myUnverified(client, seeder: Seeder, utils: UtilActions):
@ -128,6 +135,35 @@ def test_search(client, seeder: Seeder, utils: UtilActions, app, db):
response = utils.get_json_ok(url)
assert len(response.json["items"]) == 2
url = utils.get_url("api_v1_event_date_search", expected_participants_min=100)
response = utils.get_json_ok(url)
assert len(response.json["items"]) == 0
def test_search_public_status(client, seeder: Seeder, utils: UtilActions, app, db):
user_id, admin_unit_id = seeder.setup_api_access(user_access=False)
published_id = seeder.create_event(admin_unit_id)
planned_id = seeder.create_event(admin_unit_id, planned=True)
seeder.create_event(admin_unit_id, draft=True)
url = utils.get_url("api_v1_event_date_search")
response = utils.get_json_ok(url)
assert len(response.json["items"]) == 1
assert response.json["items"][0]["event"]["id"] == published_id
url = utils.get_url(
"api_v1_event_date_search", public_status=["published", "planned"]
)
response = utils.get_json_ok(url)
assert len(response.json["items"]) == 1
assert response.json["items"][0]["event"]["id"] == published_id
seeder.authorize_api_access(user_id, admin_unit_id)
response = utils.get_json_ok(url)
assert len(response.json["items"]) == 2
assert response.json["items"][0]["event"]["id"] == published_id
assert response.json["items"][1]["event"]["id"] == planned_id
def test_search_oneDay(client, seeder: Seeder, utils: UtilActions):
from project.dateutils import create_berlin_date

View File

@ -250,25 +250,6 @@ class Seeder(object):
return organizer_id
def upsert_admin_unit_api_key(self, admin_unit_id, name):
from project.services.api_key import upsert_api_key
with self._app.app_context():
api_key = upsert_api_key(admin_unit_id, name)
self._db.session.commit()
api_key_id = api_key.id
return api_key_id
def upsert_default_admin_unit_api_key(self, admin_unit_id):
from project.services.admin_unit import get_admin_unit_by_id
with self._app.app_context():
admin_unit = get_admin_unit_by_id(admin_unit_id)
api_key_id = self.upsert_admin_unit_api_key(admin_unit_id, admin_unit.name)
return api_key_id
def insert_event_custom_widget(
self,
admin_unit_id,
@ -385,6 +366,7 @@ class Seeder(object):
description="Beschreibung",
tags="",
place_id=None,
planned=False,
**kwargs
):
from project.models import (
@ -419,6 +401,9 @@ class Seeder(object):
)
event.date_definitions = [date_definition]
if planned:
event.public_status = PublicStatus.planned
if draft:
event.public_status = PublicStatus.draft

View File

@ -1,9 +0,0 @@
def test_list(client, seeder, utils):
user_id, admin_unit_id = seeder.setup_base()
seeder.create_event(admin_unit_id)
url = utils.get_url("planing")
utils.get_ok(url)
url = utils.get_url("planing", keyword="name")
utils.get_ok(url)

View File

@ -0,0 +1,18 @@
from tests.seeder import Seeder
from tests.utils import UtilActions
def test_list(client, seeder: Seeder, utils: UtilActions):
user_id, admin_unit_id = seeder.setup_base()
seeder.create_event(admin_unit_id)
url = utils.get_url("planning")
utils.get_ok(url)
def test_list_can_not_use_planning(client, seeder: Seeder, utils: UtilActions):
user_id, admin_unit_id = seeder.setup_base(admin_unit_verified=False)
url = utils.get_url("planning")
response = utils.get(url)
utils.assert_response_permission_missing(response, "manage_admin_units")