Skip to content

Commit

Permalink
Merge branch 'us_50362' into staging
Browse files Browse the repository at this point in the history
  • Loading branch information
mamico committed Jan 9, 2024
2 parents 16786cd + 1639caa commit b20d263
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -145,28 +145,22 @@ def __call__(self, *args, **kwargs):
"@id": prenotazioni_folder.absolute_url(),
"uid": prenotazioni_folder.UID(),
"title": prenotazioni_folder.Title(),
"orario_di_apertura": prenotazioni_folder.orario_di_apertura,
# "address": sede,
"orario_di_apertura": getattr(prenotazioni_folder, "orario_di_apertura", None),
"description_agenda": json_compatible(
prenotazioni_folder.descriptionAgenda,
prenotazioni_folder,
),
}
if getattr(self.prenotazione, "address", None):
try:
data["booking_folder"]["address"] = json.loads(
self.prenotazione.address
)
except json.decoder.JSONDecodeError:
logger.warning(
"Address field is not JSON serializable: %s",
self.prenotazione.address,
)
except TypeError:
logger.warning(
"Address field is not JSON serializable: %s",
self.prenotazione.address,
)
for other in ["booking_address", "booking_office"]:
if getattr(self.prenotazione, other, None):
try:
data[other] = json.loads(getattr(self.prenotazione, other))
except Exception:
logger.warning(
"%s field is not JSON serializable: %s",
other,
getattr(self.prenotazione, other),
)
data["requirements"] = requirements
data["cosa_serve"] = requirements # BBB
return data
43 changes: 33 additions & 10 deletions src/redturtle/prenotazioni/restapi/services/booking/add.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from zope.interface import alsoProvides

from redturtle.prenotazioni import _
from redturtle.prenotazioni import logger
from redturtle.prenotazioni.adapters.booker import BookerException
from redturtle.prenotazioni.adapters.booker import IBooker
from redturtle.prenotazioni.content.prenotazione import VACATION_TYPE
Expand Down Expand Up @@ -64,26 +65,48 @@ def reply(self):
)
raise BadRequest(msg)

if "address" in data:
# other_fields: {
# booking_address: prenotazioneObj.booking_folder?.address?.['@id'],
# booking_office: prenotazioneObj.booking_office?.['url'],
# booking_contact_info: (prenotazioneObj.booking_office?.contact_info || []).map((c) => c['@id']),
# },
if "other_fields" in data:
# XXX: i dati arrivano da un utente, eventualmente anche anonimo non possiamo
# permetterci di salvare i dati raw che arrivano, piuttosto salviamo
# solo la url dell'uffico di riferimento da cui poi recuperare i dati
# in fase di visualizzazione o salviamo i dati serializzati ora a partire dalla url
# passata dall'utente. Per ora la seconda opzione è più conservativa nel caso
# in cui l'ufficio cambi i dati dopo la prenotazione o venga eliminato.
if data["address"].get("href", None):
# TODO: usare volto_frontend_url
path = urlparse(data["address"]["href"]).path
ou = api.content.get(path)
if ou:
# TODO: aggiungere 'address' nello schema di booking ?
obj.address = json.dumps(
getMultiAdapter((ou, self.request), ISerializeToJsonSummary)()
)
other = data["other_fields"]
if other.get("booking_office", None):
# XXX: aggiungere 'booking_office' nello schema di booking ?
self.save_other_field(obj, "booking_office", other["booking_office"])
if other.get("booking_address", None):
self.save_other_field(obj, "booking_address", other["booking_address"])
# XXX: da valutare
# if other.get("booking_contact_info", None):

serializer = queryMultiAdapter((obj, self.request), ISerializeToJson)
return serializer()

def save_other_field(self, obj, field, value):
try:
# TODO: usare volto_frontend_url
path = urlparse(value).path
other = api.content.get(path)
if other:
setattr(
obj,
field,
json.dumps(
getMultiAdapter(
(other, self.request), ISerializeToJsonSummary
)()
),
)
except Exception:
logger.exception("Error while saving %s field %s for %s", value, field, obj)

def validate(self):
data = json_body(self.request)
data_fields = {field["name"]: field["value"] for field in data["fields"]}
Expand Down

0 comments on commit b20d263

Please sign in to comment.