Commit Graph

491 Commits

Author SHA1 Message Date
Benjamin Dauvergne 2f3afe5ad2 translation update 2020-05-19 19:36:15 +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
Benjamin Dauvergne 3c5d056fa3 add test on metz data (#42169) 2020-05-19 14:54:55 +02:00
Lauréline Guérin ea908cde22
manager: view to duplicate a desk (#42626) 2020-05-18 10:21:59 +02:00
Frédéric Péters b61097e250 manager: display undefined delays with proper label (#42270) 2020-05-16 09:28:55 +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
Lauréline Guérin 19af0088ff
agendas: fix import when unknown field found (#42523) 2020-05-07 11:25:44 +02:00
Lauréline Guérin cc6da3d0a8
manager: fix exception form when start_datetime is invalid (#42397) 2020-05-05 14:59:24 +02:00
Benjamin Dauvergne d28c18add0 agendas: add unique_together meta to VirtualMember (#42413) 2020-05-04 16:30:03 +02:00
Lauréline Guérin 4d5d9a7c3c
agendas: fix import when missing exceptions or timeperiods (#42196) 2020-05-04 09:09:46 +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
Benjamin Dauvergne 124ff4b0aa tests: use a temporary MEDIA_ROOT (#42325) 2020-04-30 12:56:17 +02:00
Frédéric Péters 4fac2c3cd1 misc: compute time slots using tz-aware datetimes (#42146) 2020-04-28 15:16:51 +02:00
Frédéric Péters cf030d8e4d misc: create timeslot virtual id on-demand (#42147) 2020-04-28 11:05:06 +02:00
Christophe Siraut 6f6bc17fe9 Jenkinsfile: use default distribution target (#41301) 2020-04-24 14:02:35 +02:00
Lauréline Guérin 19fa33cb21
agendas: clean db unique constraint for event slug (#41180) 2020-04-21 09:25:30 +02:00
Frédéric Péters 7536f3fe06 jenkins: build buster packages 2020-04-18 15:11:48 +02:00
Frédéric Péters e07c450d7c trivial: reapply black to sync_desks_timeperiod_exceptions.py 2020-04-14 20:09:01 +02:00
Frédéric Péters 01aaa54b4c translation update 2020-04-14 09:26:43 +02:00
Serghei Mihai fbd7720fa6 agendas: filter exception sources with really no associated file (#41331) 2020-04-04 15:25:11 +02:00
Frédéric Péters 5980720ec2 translation update 2020-04-01 11:05:48 +02:00
Emmanuel Cazenave 2748439c23 api: add more infos on places for an event agenda (#40412) 2020-03-31 14:47:12 +02:00
Frédéric Péters bf693322be tox: remove pylint limits 2020-03-29 20:57:01 +02:00
Lauréline Guérin dba672f542
manager: add exception on all day (#40456) 2020-03-27 14:04:22 +01:00
Frédéric Péters 7c079db282 misc: fix looking up for extra meeting types (#37123) 2020-03-20 14:30:11 +01:00
Frédéric Péters fd8ed33d70 translation update 2020-03-20 13:19:47 +01:00
Frédéric Péters a4666a8ecb misc: use dictionary substitution in translable string (#37123) 2020-03-20 13:07:22 +01:00
Emmanuel Cazenave 7c707f6674 virtual agendas: handle import/export (#40057) 2020-03-20 13:03:34 +01:00
Emmanuel Cazenave ec474b46d2 api: restrict slots with exluded timeperiods (#40058) 2020-03-20 13:03:34 +01:00
Emmanuel Cazenave aec5b30fd9 manager: add excluded timeperiods management (#40058) 2020-03-20 13:03:34 +01:00
Emmanuel Cazenave 3aba16e82b virtual agendas: allow direct relation from agenda to timeperiod (#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 2111a1872b manager: allow empty booking delays on virtual agendas (#40121) 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 e2f041511f manager: add views for virtual agendas (#37123) 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
Lauréline Guérin 65b1286d5e
make tests insensible to postgres/sqlite (#39583) 2020-03-13 10:20:43 +01:00
Lauréline Guérin 769f77c4c8
jenkins: run tests using postgres (#39583) 2020-03-13 10:20:43 +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
Frédéric Péters 3e47c5d63f doc: add black invocation line to README 2020-03-11 12:44:37 +01:00
Frédéric Péters 6fbe1e85cc trivial: apply black settings to sync_desks_timeperiod_exceptions.py 2020-03-11 12:42:31 +01:00
Lauréline Guérin 76216de0c3 manager: fix enddate prefill (#40457) 2020-03-06 16:31:31 +01:00
Frédéric Péters 08572b1add style: never reduce booking height on hover (#40506) 2020-03-06 16:30:31 +01:00