Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[16.0][IMP] resource_booking: partner button #102

Closed

Conversation

norlinhenrik
Copy link

Open a contact.
Click the button Bookings.
Create a booking.
The contact is assigned to the new booking.

@norlinhenrik norlinhenrik changed the title [16.0[[IMP] resource_booking: partner button [16.0][IMP] resource_booking: partner button Aug 30, 2023
@norlinhenrik norlinhenrik force-pushed the 16.0-imp-resource_booking-partner-button branch 2 times, most recently from 37012bf to c3a89da Compare August 30, 2023 14:55
@norlinhenrik
Copy link
Author

norlinhenrik commented Aug 30, 2023

How can I fix the pre-commit? The code to remove and add is exactly the same!

@norlinhenrik norlinhenrik force-pushed the 16.0-imp-resource_booking-partner-button branch 2 times, most recently from 0b2bc4c to 2224fd1 Compare August 30, 2023 19:08
Jairo Llopis and others added 24 commits September 19, 2023 19:39
This module adds a new app to allow you to book resource combinations in given
schedules.

Example use cases:

* Management of consultations in a clinic.
* Salesman appointments.
* Classroom and projector reservations.
* Hotel room booking.

Among the things you can do:

* Specify the type of booking, which includes a calendar of availability.
* Specify which resources can be booked together. All of them must be free to be booked.
* Place pending bookings, effectively giving permissions to someone to see the availability calendar and choose one slot.
* Partners can do that from their portals.
* If a partner has no user, he can still do the same via a tokenized URL.
* Backend users can also do that from the backend.
* Booking lifecycle with computed states.
* Automatic meeting creation and deletion.
* Automatic conflict detection.
* Deadline to block modifications.

@Tecnativa TT28201
Currently translated at 100.0% (190 of 190 strings)

Translation: calendar-12.0/calendar-12.0-resource_booking
Translate-URL: https://translation.odoo-community.org/projects/calendar-12-0/calendar-12-0-resource_booking/es/
…ating calendars

Without this patch, users couldn't change a calendar schedule if there were past or unconfirmed bookings that wouldn't fit in it.

Excluding those bookings from the check fixes the situation.

We also check that, to confirm a booking, it must fit in the calendar (because now it can happen that, in the time that has passed since the booking was scheduled until it is confirmed, the calendar changes).

@Tecnativa TT29509
The notifications emitted to the resource booking requester must always be in the same TZ as the resource booking itself.

For example, if you book one hotel room in the other side of the world, a notification in your own TZ is confusing.

Besides, res.partner created from website_sale are created with `tz=False`, making it even more confusing.

@Tecnativa TT30331
The constraint that checks the schedule of a resource booking is currently being applied to all the bookings, including past ones.
As the resource combination or associated calendars might change regularly and trigger a recomputation of this, such change might take a very long time.
Plus, the calendar restrictions might change, trigger a recompute of the constraint and detect bookings that can't be assigned, which makes no sense when they already happened.

This applies it only to future bookings, ignoring past ones.

TT30478
It's very unlikely that you need to book resources in a seconds-based precision.

This simplifies portal UI. Still, declared as a variable in case you need some customizations downstream.

@Tecnativa TT31063
- Standard v13 changes.
- Some onchanges removed in favor of computes.

@Tecnativa TT30987
From now on, `resource.booking.type` duration represents the default duration that will be applied to new `resource.booking` of that type, instead of the hardcoded duration for every new booking.

This means that you can create a new booking in pending state and define a custom duration before sending the portal link to customer.

Thus, the available schedule slots in portal will be based on the type duration, whereas only those that have enough time left to complete the booking duration will be displayed.

@Tecnativa TT30987
…cation

Thanks to this patch, you will be able to more predictably block the chosen resource combination, with the added checkbox.

Also, the location field is propagated to `resource.booking` records, and synced from there to `calendar.event` if needed. This way, you can alter the location before sending the portal invitation.

@Tecnativa TT30987
The filter wasn't working fine due to the `auto_join=True` set in `meeting_id`. It was never displaying pending bookings.

Besides, it wasn't necessary to keep it as a field because it was displayed nowhere and the search could be done directly in the view. This way, there's less python code to maintain and we disable the possibility of having a negative domain, which enters doomed scenarios when x2many fields are involved (see odoo/odoo#43957).

@Tecnativa TT30987
Adding `.with_context(exclude_public_holidays=True)` in needed places to let `hr_holidays_public` do its magic and never allow allocating a booking during a public holidays when that module is properly installed and configured.

@Tecnativa TT30987
- Allow users to optionally define a name for the resource booking.
- Display that name in portal if set.
- Sync it with meeting name when creating it.

@Tecnativa TT30987
Without this patch, when entering the Resource Bookings menu, if the current user attended any recurrent meeting, it failed with this error:

```
Server application error
 Error code: 200
 Error message: Odoo Server Error
 Error data message:
 invalid input syntax for integer: "82-20210726143000"
LINE 1: ... AND  ("resource_booking"."meeting_id" in (3,5,81,'82-202107...
                                                             ^

 Error data debug:
 Traceback (most recent call last):
  File "/opt/odoo/custom/src/odoo/odoo/http.py", line 624, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/opt/odoo/custom/src/odoo/odoo/http.py", line 310, in _handle_exception
    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
  File "/opt/odoo/custom/src/odoo/odoo/tools/pycompat.py", line 14, in reraise
    raise value
  File "/opt/odoo/custom/src/odoo/odoo/http.py", line 669, in dispatch
    result = self._call_function(**self.params)
  File "/opt/odoo/custom/src/odoo/odoo/http.py", line 350, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/opt/odoo/custom/src/odoo/odoo/service/model.py", line 94, in wrapper
    return f(dbname, *args, **kwargs)
  File "/opt/odoo/custom/src/odoo/odoo/http.py", line 339, in checked_call
    result = self.endpoint(*a, **kw)
  File "/opt/odoo/custom/src/odoo/odoo/http.py", line 915, in __call__
    return self.method(*args, **kw)
  File "/opt/odoo/custom/src/odoo/odoo/http.py", line 515, in response_wrap
    response = f(*args, **kw)
  File "/opt/odoo/auto/addons/web/controllers/main.py", line 1339, in call_kw
    return self._call_kw(model, method, args, kwargs)
  File "/opt/odoo/auto/addons/web/controllers/main.py", line 1331, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/opt/odoo/custom/src/odoo/odoo/api.py", line 383, in call_kw
    result = _call_kw_model(method, model, args, kwargs)
  File "/opt/odoo/custom/src/odoo/odoo/api.py", line 356, in _call_kw_model
    result = method(recs, *args, **kwargs)
  File "/opt/odoo/custom/src/odoo/odoo/models.py", line 4936, in search_read
    records = self.search(domain or [], offset=offset, limit=limit, order=order)
  File "/opt/odoo/custom/src/odoo/odoo/models.py", line 1648, in search
    res = self._search(args, offset=offset, limit=limit, order=order, count=count)
  File "/opt/odoo/custom/src/odoo/odoo/models.py", line 4499, in _search
    self._cr.execute(query_str, where_clause_params)
  File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 173, in wrapper
    return f(self, *args, **kwargs)
  File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 250, in execute
    res = self._obj.execute(query, params)
psycopg2.DataError: invalid input syntax for integer: "82-20210726143000"
LINE 1: ... AND  ("resource_booking"."meeting_id" in (3,5,81,'82-202107...
                                                             ^
```

@Tecnativa TT30987
Upstream ``unlink`` method in calendar.event adds this keyword argument.
When a user had no resource_booking permissions and opened a calendar event linked to a resource booking, he got an unnecessary access error.

@Tecnativa TT31238
When `_leave_intervals_batch()` in `resource.calendar` is extended by other modules that add more leaves for any reason, the returned recordset must be of the `resource.calendar.leaves` model. Otherwise, Odoo fails with:

    TypeError: '<' not supported between instances of 'resource.resource' and 'resource.calendar.leaves'

The resource didn't have a meaning here, so changing it to avoid bug.

@Tecnativa TT31249
Missing part from #34:

- Display booking duration and location on portal, even on pending state.
- Improve portal test to contemplate new behaviors.

@Tecnativa TT31250
- If RBC (resource.booking.combination) was auto-assigned, attendees generated from RBC human resources are expected to confirm attendance manually.
- If RBC was handpicked, those attendees are auto-confirmed.
- All those confirmations are done before sending invitations, so invitations contain the correct attendance status.
- If requester books from portal view, he's also confirmed before sending invitation, for the same reason.

@Tecnativa TT31239
This allows better filtering while in the normal calendar view.

By default, the organizer will be whoever created the booking. Calendar invitations will go out in his name.

Also, avoid sending calendar event modification notifications if the modification isn't the schedule.

@Tecnativa TT31240

resource_booking 13.0.2.3.0
Includes those coming from requester and from resource combination.

@Tecnativa TT31901
Currently translated at 97.0% (196 of 202 strings)

Translation: calendar-13.0/calendar-13.0-resource_booking
Translate-URL: https://translation.odoo-community.org/projects/calendar-13-0/calendar-13-0-resource_booking/fr_FR/
pedrobaeza and others added 26 commits September 19, 2023 19:39
- Standard procedure
- No more virtual ids
- Adapt tests
- FIX: Proper show_as meeting generation
- IMP: Add name to tree view

TT32344

[UPD] Update resource_booking.pot

[UPD] README.rst
…nction

Signed-off-by: Carmen Bianca BAKKER <carmen@coopiteasy.be>
…for a correct display.

resource_booking 14.0.1.2.0
Steps to reproduce:

- Create a resource combination with 2 user resources.
- Create a type with such resource combination.
- Create a resouce booking forcing manually such resource combination.
- Book from the portal a slot for it.

Result: Singleton error

File "/opt/odoo/auto/addons/resource_booking/controllers/portal.py", line 134, in portal_booking_confirm
  booking_form.start = when_naive
File "/opt/odoo/custom/src/odoo/odoo/tests/common.py", line 1979, in __exit__
  self.save()
File "/opt/odoo/custom/src/odoo/odoo/tests/common.py", line 1996, in save
  r.write(values)
File "/opt/odoo/auto/addons/resource_booking/models/resource_booking.py", line 509, in write
  self._sync_meeting()
File "/opt/odoo/auto/addons/resource_booking/models/resource_booking.py", line 337, in _sync_meeting
  _self.env["calendar.event"].create(to_create)
File "<decorator-gen-216>", line 2, in create
File "/opt/odoo/custom/src/odoo/odoo/api.py", line 348, in _model_create_multi
  return create(self, arg)
File "/opt/odoo/auto/addons/crm/models/calendar.py", line 40, in create
  events = super(CalendarEvent, self).create(vals)
File "<decorator-gen-201>", line 2, in create
File "/opt/odoo/custom/src/odoo/odoo/api.py", line 348, in _model_create_multi
  return create(self, arg)
File "/opt/odoo/auto/addons/resource_booking/models/calendar_event.py", line 65, in create
  records += super(
File "<decorator-gen-183>", line 2, in create
File "/opt/odoo/custom/src/odoo/odoo/api.py", line 347, in _model_create_multi
  return create(self, [arg])
File "<decorator-gen-148>", line 2, in create
File "/opt/odoo/custom/src/odoo/odoo/api.py", line 348, in _model_create_multi
  return create(self, arg)
File "/opt/odoo/auto/addons/calendar/models/calendar_event.py", line 763, in create
  vals_list = [
File "/opt/odoo/auto/addons/calendar/models/calendar_event.py", line 764, in <listcomp>
  dict(vals, attendee_ids=self._attendees_values(vals['partner_ids']))
File "/opt/odoo/auto/addons/resource_booking/models/calendar_event.py", line 102, in _attendees_values
  ctx_partner_id = rb.combination_id.resource_ids.user_id.partner_id.id
File "/opt/odoo/custom/src/odoo/odoo/fields.py", line 3822, in __get__
  raise ValueError("Expected singleton: %s" % record)
ValueError: Expected singleton: res.partner(6, 4771)

This is because there can be several linked users, but the code is
assuming that there's only one.

This commits fixes such possibility.

resource_booking 14.0.1.2.1
Currently translated at 6.6% (14 of 209 strings)

Translation: calendar-14.0/calendar-14.0-resource_booking
Translate-URL: https://translation.odoo-community.org/projects/calendar-14-0/calendar-14-0-resource_booking/ca/
Steps to reproduce:

- Create a calendar event
- Edit it
- Add an attendee
- Save it

Result: you get a permission error to resource.booking

This is because there are some operations done on resource bookings
from the calendar events. The solution is to do such operations with
sudo.

resource_booking 14.0.1.2.2
This allows the user to see the summary of an event from the calendar
view.

Signed-off-by: Carmen Bianca BAKKER <carmen@coopiteasy.be>
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: calendar-15.0/calendar-15.0-resource_booking
Translate-URL: https://translation.odoo-community.org/projects/calendar-15-0/calendar-15-0-resource_booking/
…r day

Signed-off-by: Carmen Bianca BAKKER <carmen@coopiteasy.be>
@norlinhenrik norlinhenrik force-pushed the 16.0-imp-resource_booking-partner-button branch from 2224fd1 to a7f3454 Compare September 19, 2023 18:31
@norlinhenrik
Copy link
Author

Added to #101.

@loymcom loymcom deleted the 16.0-imp-resource_booking-partner-button branch September 22, 2023 09:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.