Commit Graph

372 Commits

Author SHA1 Message Date
Lauréline Guérin 5b7c92ea5d
api: exclude slots already booked by user in fillslot (#51432) 2021-03-05 08:38:54 +01:00
Lauréline Guérin 6d57af612e
api: exclude slots already booked by user - meetings (#51341) 2021-03-01 10:48:28 +01:00
Lauréline Guérin e15439bd3c
api: exclude slots already booked by user - events (#51341) 2021-03-01 10:48:26 +01:00
Lauréline Guérin d23eafcfc6
api: list bookings of somebody (#51187) 2021-03-01 10:07:10 +01:00
Valentin Deniaud 929f70d2ac api: allow passing minimum places count in /datetimes/ (#51172) 2021-03-01 09:55:31 +01:00
Valentin Deniaud 9954337197 api: include anonymize url in fillslots response (#51366) 2021-03-01 09:42:04 +01:00
Lauréline Guérin 5e94ddeff3
api: APIError handling (#51181) 2021-02-26 08:24:26 +01:00
Lauréline Guérin 64a8a4b7f1
api: patch booking extra_data (#51340) 2021-02-23 09:00:23 +01:00
Valentin Deniaud a699e144b4 add support for recurring events (#41663) 2021-02-17 15:49:57 +01:00
Valentin Deniaud a392213dce agendas: make returning a queryset in get_open_events useless (#41663) 2021-02-17 15:49:57 +01:00
Valentin Deniaud 24296826b1 api: add first bookable slot info in /datetimes/ meta (#51165) 2021-02-16 11:21:16 +01:00
Lauréline Guérin f32f64ea54
api: category filter (#49355) 2021-02-12 09:55:09 +01:00
Valentin Deniaud 7342e8d24e api: add anonymize booking endpoint (#49093) 2021-02-01 16:33:08 +01:00
Valentin Deniaud 55841ecfcd agendas: share booking colors between agendas (#50379) 2021-01-26 20:55:12 +01:00
Nicolas Roche 446ca922be api: add a meta dict on datetimes endpoints (#50278) 2021-01-22 07:19:59 +01:00
Lauréline Guérin 1ec10c4e46 api: store the reason of an absence (#49179) 2021-01-22 07:19:44 +01:00
Lauréline Guérin d0bc3146d6
api: mark user as present or not (#38678) 2021-01-19 19:10:43 +01:00
Frédéric Péters eeda0c3f2e apply black 20.8b1 formatting 2020-12-29 10:42:33 +01:00
Valentin Deniaud 8409186543 manager: differentiate bookings with colors (#39794) 2020-12-22 17:29:11 +01:00
Valentin Deniaud 221a4051f9 api: match StringOrListField max length with model definition (#48586) 2020-12-17 14:39:02 +01:00
Lauréline Guérin 2ec664efd3
api: complete slot_status endpoint result (#48877) 2020-12-14 13:41:48 +01:00
Valentin Deniaud a51a036c13 api: use current timezone in get_max_datetime (#48464) 2020-11-30 10:37:36 +01:00
Emmanuel Cazenave 6d0e8a57ad agendas: add date filter params on datetimes api (#48078) 2020-11-17 16:31:21 +01:00
Lauréline Guérin 14baf0d93e
api: add places in datetimes endpoint result (#48431) 2020-11-17 15:07:00 +01:00
Lauréline Guérin 241d65612b
api: proper error if datetime part is wrong in a slot (#48132) 2020-11-13 09:17:28 +01:00
Emmanuel Cazenave f0b054a756 agendas: make maximal_booking_delay an excluded upper bound (#48185) 2020-11-10 16:12:42 +01:00
Emmanuel Cazenave 3617c3ff05 api: order desks by identifier (#48065) 2020-10-27 15:47:36 +01:00
Lauréline Guérin d98707aeae
api: ignore desks from other agendas in datetimes (#47645) 2020-10-15 14:47:43 +02:00
Emmanuel Cazenave 7320dcfbe6 add support for unavailability calendars (#46555) 2020-10-12 10:20:33 +02:00
Lauréline Guérin 2e091220f5
api: use APIError in fillslots view (#43077) 2020-10-01 16:30:40 +02:00
Lauréline Guérin eb8026c790
api: return only agenda with open events (#44294) 2020-09-28 13:56:55 +02:00
Lauréline Guérin 8ca72fd705
api: suspend, accept and resize endpoints only for events (#46027) 2020-09-28 11:26:28 +02:00
Lauréline Guérin 4ed8c9ce00
api: always return urls with slugs (#46758) 2020-09-28 11:02:33 +02:00
Lauréline Guérin 1995cc18e4
api: better pk & slug support in status url (#46772) 2020-09-28 10:39:43 +02:00
Valentin Deniaud 271cea7b44 agendas: add new attributes to Booking (#45293) 2020-09-16 10:05:08 +02:00
Lauréline Guérin 2537992d19
api: status view, get Event by slug and agenda (#45520) 2020-09-15 17:20:33 +02:00
Lauréline Guérin f380c419db
api: always return accept and suspend urls (#41773) 2020-09-14 17:56:30 +02:00
Emmanuel Cazenave 38df08daf0 api: use a for loop instead of itertools.group_by (#46145) 2020-09-03 10:22:00 +02:00
Valentin Deniaud bde66b58e0 manager: add event cancellation (#44157) 2020-08-31 10:04:44 +02:00
Valentin Deniaud 1864d7466d manager: add booking cancellation (#44159) 2020-08-03 12:56:18 +02:00
Lauréline Guérin e9fca76b10
manager: add opened events view for event agenda (#44457) 2020-07-24 10:06:29 +02:00
Lauréline Guérin 8adb86e2eb
misc: remove dead code 2020-07-24 10:06:29 +02:00
Lauréline Guérin 2ba381fa34
api: fix resize endpoint (#44739) 2020-07-21 14:14:59 +02:00
Emmanuel Cazenave 4dc5481456 api: support overlapping events (#44644) 2020-07-02 06:22:31 +02:00
Lauréline Guérin ff939fc570
api: return slot-bookings url in datetimes api (#44374) 2020-06-26 16:49:22 +02:00
Lauréline Guérin 549e64e4bb
agenda: generate event slug if not provided (#44375) 2020-06-26 14:30:20 +02:00
Valentin Deniaud 49bca6ecc3 api: get meeting by slug (#43526) 2020-06-26 10:53:07 +02:00
Emmanuel Cazenave ff19227fc9 agendas: mark MeetingType for deletion (#44132) 2020-06-19 08:40:48 +02:00
Lauréline Guérin 82d1a53b24
api: don't list cancelled bookings in slot_bookings api (#44160) 2020-06-18 09:50:14 +02:00
Lauréline Guérin c77edebd62
api: return opened_events_available in events agenda detail payload
(#43937)
2020-06-15 11:00:41 +02:00
Lauréline Guérin 70f0a0185f
api: add resources in fillslot_url for meetings datetime response (#43685) 2020-06-05 15:16:11 +02:00
Nicolas Roche 854b7abcc8 api: return end_datetime on booking events (#37352) 2020-06-04 10:12:29 +02:00
Lauréline Guérin 4cc127c09e
api: book also resources in fillslot(s) endpoint (#38942) 2020-06-02 11:26:43 +02:00
Lauréline Guérin a1d38b0a88
api: check resources in datetimes endpoint (#38942) 2020-06-02 11:26:43 +02:00
Lauréline Guérin 4cc1bf6c45
api: add resources list on agenda details (#38942) 2020-06-02 11:26:43 +02:00
Lauréline Guérin 0f89c488c8
api: check publication_date in datetimes & fillslots api (#40728) 2020-05-22 09:15:15 +02:00
Benjamin Dauvergne bb071f1980 misc: make empty interval using now() (#43185) 2020-05-21 10:49:44 +02:00
Benjamin Dauvergne 7973059dcb api: handle empty opening hours after removing exceptions (#43126) 2020-05-20 10:06:39 +02:00
Benjamin Dauvergne ece063b2b3 api: optimize get_all_slots() and around it (#42169)
Workflow in get_all_slots() is simplified :
* first we accumulate, for each desk, the set of time slots when a booking cannot
occur or is already booked,
* then we generate the list of possible time slots and match them to the
exclusion and already booked set.

Intervals is replaced by a simpler data-structure, IntervalSet, it does
not need to be a map, a simple set is enough.

Also :
* moved TimePeriod.get_effective_timeperiods() to the agenda level , it
deduplictes TimePeriod between desks and remove excluded TimePeriod for
virtual agendas.

* added a named-tuple WeekTime to represent a TimePeriod base unit, so
we can use them in IntervalSet easily (as they can be compared) to
compute the effective time periods,

* the fact that base_duration is unique for a given virtual agenda is
now accounted and stated everywhere,

* the fact that generated time slots must have time in the local
timezone for the API to work is now stated everywhere,

* In get_all_slots(), also :
  * integrated the code of get_exceptions_by_desk() into get_all_slots()
  to further reduce the number of SQL queries.
  * used_min/max_datetime is reduced by the exclusion periods, and
    effective time periods are grouped based on the used_min/max_datetime of
    each agenda.
  * pre-filter slots for uniqueness when generating available datetimes
    (but for filling slot we still need exact availability information
    for each desk)
2020-05-19 18:19:34 +02:00
Lauréline Guérin d41b9ab20b
api: list bookings of user_external_id for an event (#40719) 2020-05-15 11:32:49 +02:00
Lauréline Guérin 1584b52ed3
agendas: add user_external_id field on Booking (#40719) 2020-05-15 11:15:41 +02:00
Lauréline Guérin 8e775f2bd3
api: fix fillslots api when meeting type id is not found (#42534) 2020-05-15 09:44:24 +02:00
Frédéric Péters 746e027573 api: include agenda details to fillslot response (#42360) 2020-05-03 18:58:15 +02:00
Frédéric Péters 9d0b76c82a api: reduce number of sql queries in datetimes API (#42142) 2020-05-01 09:29:17 +02:00
Emmanuel Cazenave 2748439c23 api: add more infos on places for an event agenda (#40412) 2020-03-31 14:47:12 +02:00
Emmanuel Cazenave ec474b46d2 api: restrict slots with exluded timeperiods (#40058) 2020-03-20 13:03:34 +01:00
Emmanuel Cazenave 55f6d0e47d virtual agendas: use real agendas booking delays (#40121)
If booking delays are defined on the virtual agenda, they will take
precedence.
2020-03-20 13:03:34 +01:00
Emmanuel Cazenave 06f542f851 virtual agendas: balance fill rate (#40056) 2020-03-20 13:03:34 +01:00
Emmanuel Cazenave 565d471d07 start virtual agendas (#37123) 2020-03-20 13:03:34 +01:00
Lauréline Guérin f675e0e7ef
api: return overbooked_places in accept endpoint response (#40017) 2020-03-19 16:16:57 +01:00
Lauréline Guérin 8ea7b2ae37
api: endpoint to resize a booking (#40039) 2020-03-17 15:00:29 +01:00
Lauréline Guérin bccba482b4
api: can not cancel, accept or suspend a secondary booking (#40039) 2020-03-17 14:21:50 +01:00
Lauréline Guérin 5636c001ac
api: agendas endpoint with filtering (#37436) 2020-03-13 10:51:01 +01:00
Frédéric Péters a9cedd9018 api: always use event id in advertised fillslot URL (#40648) 2020-03-11 12:44:37 +01:00
Emmanuel Cazenave 3d9ea06ec7 general: reformat using black 2020-03-04 16:17:54 +01:00
Lauréline Guérin bd40148eed
api: add a param force_waiting_list to fillslot (#40022) 2020-03-03 15:26:24 +01:00
Lauréline Guérin 8d327c0dfe
api: add a suspend action on Booking (#40018) 2020-02-21 16:15:12 +01:00
Frédéric Péters 61496b5cdf general: add pricing & url attributes to events (#37979) 2020-01-14 15:25:53 +01:00
Emmanuel Cazenave 7c6528f3b8 api: count correctly requested places on multiple booking (#38306) 2019-12-20 12:02:42 +01:00
Emmanuel Cazenave 559452990c api: return 400 when no events found (#38333) 2019-12-20 11:53:56 +01:00
Emmanuel Cazenave c420dde65d api: accept slots as a string (#38333) 2019-12-20 11:46:10 +01:00
Emmanuel Cazenave 5f09ce7fdb api: return events details if multiple booking (#38330) 2019-12-20 11:14:29 +01:00
Frédéric Péters 30bbc8c90f general: reformat using black (#37464)
black--target-version py35 --skip-string-normalization --line-length 110 .
2019-12-16 16:24:38 +01:00
Frédéric Péters bd6dbe50fd misc: get reverse{_lazy} from new django.urls module (#36331) 2019-12-11 09:45:02 +01:00
Frédéric Péters 5be7a36833 api: only use event slug in URLs when it is set (#38081) 2019-11-29 13:41:39 +01:00
Lauréline Guérin 35dcc849df
api: return places info on fillslot api for an event agenda (#35297) 2019-11-19 16:31:56 +01:00
Lauréline Guérin 3bf36a1617
api: return err_desc & reason in case of error (#24025) 2019-11-07 17:01:01 +01:00
Lauréline Guérin 90dfb10afa
api: get event status and fillslot with event pk or slug (#15726) 2019-11-06 18:25:25 +01:00
Frédéric Péters a0da57e0f3 misc: add a description field to events (#36169) 2019-09-17 08:50:05 +02:00
Benjamin Dauvergne 61e0c590b8 api: returns 400 on invalid fillslot's event_pk (#35451) 2019-08-20 19:32:01 +02:00
Thomas NOËL af3b8ffc44 api: allow empty cancel_booking_id (#33783) 2019-06-11 12:10:07 +02:00
Emmanuel Cazenave ab9ff7adf1 api: cancel a booking when making a new one (#33489) 2019-05-29 16:09:56 +02:00
Frédéric Péters c3373ae379 api: format dates in fillslot response (#33151) 2019-05-17 09:34:28 +02:00
Serghei Mihai 0cfa22dbc0 agendas: add new booking's label attribute for user presentation purposes (#25820)
Use the new label in ICS summary
2019-03-21 12:02:04 +01:00
Frédéric Péters 3cc8e5d690 misc: remove comments with old attribute value (#31421) 2019-03-17 15:17:28 +01:00
Frédéric Péters cd36887df6 api: return an error when number of requested places is <= 0 (#31047) 2019-03-06 11:11:02 +01:00
Frédéric Péters b3a284d825 api: include delays in agenda API (#29847) 2019-02-07 11:25:11 +01:00
Frédéric Péters ac9705a167 api: fix max size of booking label (#29402) 2019-01-02 17:11:31 +01:00
Frédéric Péters 07e3e5180f api: add duration to meeting fillslot result (#27900) 2018-11-14 08:42:59 +01:00
Serghei Mihai 0f34cd204c api: expose meeting type duration (#25410) 2018-07-23 09:47:05 +02:00
Serghei Mihai 0ce55339a7 api: add booking ics view (#22930) 2018-07-19 10:39:17 +02:00
Frédéric Péters e1536441af remove unused imports 2018-07-01 13:18:48 +02:00
Thomas NOËL ae54f6960f api: add endpoint to fill a list of slots (#16238) 2018-05-31 14:11:10 +02:00
Frédéric Péters f4203d05f3 general: add support for Python 3 (#23678) 2018-05-13 15:19:14 +02:00
Thomas NOËL 87f8cbff15 api: use rest_framework serializers (#22979) 2018-04-04 16:07:00 +02:00
Frédéric Péters 385670124f api: create real Event object after slot has been checked (#22971) 2018-04-04 10:51:54 +02:00
Frédéric Péters 1c73fa736c doc: comment fake_event usage in meeting datetimes API 2018-04-04 10:51:54 +02:00
Josue Kouka a20bfdb254 api: add shortcut for event status url (#22125) 2018-03-06 17:13:20 +01:00
Frédéric Péters 51bd5c752d api: check time periods have enough time for a single meeting (#21463) 2018-01-29 16:28:32 +01:00
Frédéric Péters b8b130e4f7 misc: always use timezone-aware datetimes (#20926) 2018-01-09 19:49:28 +01:00
Benjamin Dauvergne 6d4afedc47 api: replace intervaltree by chrono.interval (#20732) 2017-12-30 08:56:02 +01:00
Frédéric Péters 8069c20c74 api: include meeting end datetime in fillslot API response (#20556) 2017-12-11 11:20:53 +01:00
Frédéric Péters 1111695dd5 api: correctly remove all timeslots overlapped by exceptions (#20386) 2017-12-04 14:23:18 +01:00
Frédéric Péters a51fb45aa4 general: add label/user_name/backoffice_url metadata on bookings (#20280) 2017-12-02 19:01:14 +01:00
Frédéric Péters 20aa74b697 api: don't return agenda internal identifiers (#19266) 2017-10-30 14:38:49 +01:00
Frédéric Péters 6ead030aed api: add dedicated error handling for invalid place count value (#19552) 2017-10-19 14:08:40 +02:00
Josue Kouka fc1bdf3391 api: add desk info in booking response (#18973) 2017-10-12 08:56:45 +02:00
Frédéric Péters 169cc6a0ab api: add new API to get list of desks (#19069) 2017-10-12 08:51:49 +02:00
Josue Kouka 74516b5300 fix: exclude slot one exception at a time (#19009) 2017-09-27 15:50:54 +02:00
Josue Kouka 9d7738929c add time period exception management (#12550) 2017-09-26 10:16:58 +02:00
Frédéric Péters b721160128 fix next day but less than 24h delta booking (#18495) 2017-09-08 17:18:36 +02:00
Josue Kouka f851de07df add multiple desk management (#15729) 2017-09-04 11:00:01 +02:00
Frédéric Péters f7db30cfcc api: optimize fillslot endpoint calculation in meetings/datetimes API (#17954) 2017-08-10 11:28:57 +02:00
Frédéric Péters b3f6f63853 api: include full meeting timeslot as disabled values (#17953) 2017-08-10 09:47:22 +02:00
Josue Kouka 2ebb54d63c api datetimes: add date range filter (#16193) 2017-07-21 17:00:50 +02:00
Frédéric Péters 471d8db694 api: only look in waiting list if there's not enough place in event (#17514) 2017-07-11 13:40:13 +02:00
Josue Kouka 28028b681d api: add API to retrieve agenda detail (#17188) 2017-06-26 17:50:57 +02:00
Frédéric Péters ffcda3904a general: add possibility to book multiple places at once (#15218) 2017-06-23 12:59:13 +02:00
Frédéric Péters 2907e4bb90 api: include full URL in cancel_url and accept_url attributes (#17145) 2017-06-23 12:58:23 +02:00
Frédéric Péters 678b297adf api: include meeting types endpoints in /agenda/ API (#16448) 2017-06-11 10:09:10 +02:00
Frédéric Péters d46adc81c0 api: do not crash on unknown agenda (with integer identifier) (#15066) 2017-06-11 09:49:07 +02:00
Frédéric Péters 7abcd52464 api: change http status code on wrong agenda kind error (#16813) 2017-06-11 09:48:48 +02:00
Frédéric Péters 998b6575f8 api: add endpoint to get list of meeting types (#13360) 2017-06-11 09:48:48 +02:00
Frédéric Péters 63ffddd5fb api: fix datetimes API on UTC/local timezone/hour borders (#16348) 2017-05-23 14:50:16 +02:00
Frédéric Péters 7a0d7e5557 api: make datetimes return datetimes in localtime (#16194) 2017-05-06 13:04:42 +02:00
Frédéric Péters c5d7c3da9d api: change agendas API to have datetimes URL in a datetimes_url key (#16213) 2017-05-06 13:04:42 +02:00
Frédéric Péters 2e0f219a66 api: include accept/cancel URLs in booking response (#16126) 2017-05-06 10:03:46 +02:00
Frédéric Péters 59f03a9fbe api: include fillslot API URLs in datetimes response (#16125) 2017-05-06 10:03:46 +02:00
Frédéric Péters 5ad7c3ee62 api: include datetime in fillslot return value (#16031) 2017-05-06 10:03:46 +02:00
Frédéric Péters e5d44b42df api: include iso formatted datetime in datetime APIs (#14514) 2017-01-20 10:50:07 +01:00
Frédéric Péters 51bbc55b7f general: don't allow booking past the event date (#14513) 2017-01-20 10:39:47 +01:00
Frédéric Péters f4a7564058 api: open up agendas and datetimes API endpoints (#14604) 2017-01-13 14:59:10 +01:00
Frédéric Péters 3b82689ba8 tests: add more api error checks 2016-10-29 20:39:52 +02:00
Frédéric Péters c33754433f api: update meeting types API to be based on slugs (#13792) 2016-10-29 15:14:50 +02:00
Frédéric Péters a233f39dd1 api: update datetimes/fillslot API to get agenda by slug (#13792) 2016-10-29 15:14:49 +02:00
Frédéric Péters 948bb3d003 api: include full events in /datetimes/ API, with a disabled attribute (#13037) 2016-10-09 11:38:56 +02:00
Frédéric Péters afedcf933f api: rely on model default ordering when presenting list of events 2016-09-13 19:12:28 +02:00
Frédéric Péters 71b7130445 add minimal/maximal booking delays (#12673) 2016-09-11 19:16:15 +02:00
Frédéric Péters b26f51e36c add support for "meetings" agendas (#13139) 2016-09-11 11:31:29 +02:00
Frédéric Péters 2da78fd12a api: return a 404 on /status/ for non-existing booking id 2016-07-22 13:45:53 +02:00
Frédéric Péters b7d097dd7b api: export waiting list status (#12700) 2016-07-22 13:41:23 +02:00
Frédéric Péters 9a6bfd81f8 pylint: remove unused import 2016-07-20 13:29:09 +02:00
Frédéric Péters fd0045fe49 api: add better error handling for invalid accept/cancel POSTs (#12664) 2016-07-20 13:22:58 +02:00
Frédéric Péters e27c31583c api: don't use 400 error code for "sold out" error (#12397) 2016-07-20 08:48:56 +02:00
Frédéric Péters 7b3dba5236 trivial: remove unused F import 2016-07-07 16:38:00 +02:00
Frédéric Péters 5aeb24d58a general: add waiting list support (#11111) 2016-07-07 16:21:55 +02:00
Frédéric Péters c3ef0d7441 api: add POST endpoint to cancel a booking (#11472) 2016-06-23 19:31:12 +02:00
Frédéric Péters 6143122436 trivial: update variable name not to clash with global view name 2016-06-20 14:52:56 +02:00
Frédéric Péters 18d45ce6af trivial: remove unused import 2016-06-20 14:48:50 +02:00
Frédéric Péters 54b7142f54 api: add datetimes API endpoint to agendas API 2016-06-20 09:34:53 +02:00
Frédéric Péters c3e3e5d574 api: add new API to get list of agendas (#11424) 2016-06-19 21:23:23 +02:00
Frédéric Péters 308bd37ecd general: allow a custom label on events (#11112) 2016-06-18 13:29:52 +02:00
Frédéric Péters bb09199d96 api: add endpoint to get number of total/available/reserved places (#11374) 2016-06-18 12:24:21 +02:00
Frédéric Péters 2cc63f1481 api: require proper authentication to use API (#11375) 2016-06-18 11:59:26 +02:00
Frédéric Péters 6bc22b0dfe general: make it possible to cancel bookings (#9999) 2016-03-30 08:05:23 +02:00
Frédéric Péters 71c7ee0552 api: exclude past dates (#10000) 2016-03-30 08:05:21 +02:00
Frédéric Péters bcc9e4091e api: use django DATETIME_FORMAT to format dates
Also add a custom DATETIME_FORMAT value to French locale, without seconds.
2016-03-30 08:04:51 +02:00
Frédéric Péters 7ba881f3d2 api: return datetimes in local timezone 2016-02-23 22:36:09 +01:00
Frédéric Péters f7f7c2ef26 misc: display booked places in manager view
(this factors the booked_place annotation into a new manager for the Event
object)
2016-02-23 22:36:09 +01:00
Frédéric Péters b14ca48427 api: consider booked places 2016-02-23 22:36:09 +01:00
Frédéric Péters 16ed50b9d4 add booking API 2016-02-23 22:36:09 +01:00
Frédéric Péters 2e25f21dd0 add /api/agenda/<agenda>/datetimes/ API endpoint 2016-02-23 22:36:08 +01:00