def get_booking_urls(self, day, slot, slot_min_size=0, gate=None): """ Returns, if possible, the booking urls """ # we have some conditions to check if not self.is_valid_day(day): return [] if self.maximum_bookable_date: if day > self.maximum_bookable_date.date(): return [] date = day.strftime("%Y-%m-%d") params = self.remembered_params.copy() times = slot.get_values_hr_every(300, slot_min_size=slot_min_size) base_url = self.base_booking_url urls = [] now_str = tznow().strftime("%Y-%m-%d %H:%M") for t in times: form_booking_date = " ".join((date, t)) params["form.booking_date"] = form_booking_date if gate: params["gate"] = gate booking_date = DateTime( params["form.booking_date"]).asdatetime() # noqa urls.append({ "title": t, "url": urlify(base_url, params=params), "class": t.endswith(":00") and "oclock" or None, "booking_date": booking_date, "future": (now_str <= form_booking_date), }) return urls
def move_to_slot_links(self, day, slot, gate): """ Returns the url to move the booking in this slot """ if not self.prenotazioni_view.is_valid_day(day): return [] if self.prenotazioni_view.maximum_bookable_date: if day > self.prenotazioni_view.maximum_bookable_date.date(): return [] date = day.strftime("%Y-%m-%d") params = { "form.buttons.action_move": "Move", "data": self.request.form.get("data", ""), "form.widgets.gate": gate, } times = slot.get_values_hr_every(300) urls = [] base_url = "/".join((self.context.absolute_url(), "prenotazione_move")) now_str = tznow().strftime("%Y-%m-%d %H:%M") for t in times: form_booking_date = " ".join((date, t)) params["form.widgets.booking_date"] = form_booking_date urls.append( { "title": t, "url": addTokenToUrl(urlify(base_url, params=params)), "class": t.endswith(":00") and "oclock" or None, "future": (now_str <= form_booking_date), } ) return urls
def back_to_booking_url(self): """ This goes back to booking view. """ qs = { "data": (self.context.getData_prenotazione().strftime("%d/%m/%Y")) } return urlify(self.prenotazioni_folder.absolute_url(), params=qs)
def back_url(self): """ Go back parent prenotazioni folder in the right day """ booking_date = self.booking_date target = self.prenotazioni_folder.absolute_url() if booking_date: qs = {"data": booking_date.strftime("%d/%m/%Y")} target = urlify(target, params=qs) return target
def move_url(self): """ move this booking visiting this url """ can_move = api.user.has_permission("Modify portal content", obj=self.context) if not can_move: return "" booking_date = self.booking_date target = "/".join((self.context.absolute_url(), "prenotazione_move")) if booking_date: qs = {"data": booking_date.strftime("%d/%m/%Y")} target = urlify(target, params=qs) return target
def get_search_gate_url(self, gate, day): """ Search a a gate """ params = {"start": day, "end": day} vr = getVocabularyRegistry() voc = vr.get(self.context, "redturtle.prenotazioni.gates") try: params["gate"] = voc.getTerm(gate).token except LookupError: params["text"] = gate return urlify(self.context.absolute_url(), "@@prenotazioni_search", params=params)
def toggle_columns_url(self): """ The link to enable/disable the columns """ params = self.prenotazioni.remembered_params.copy() if ("disable_plone.leftcolumn" in params or "disable_plone.rightcolumn" in params): # noqa params.pop("disable_plone.leftcolumn", "") params.pop("disable_plone.rightcolumn", "") else: params["disable_plone.leftcolumn"] = 1 params["disable_plone.rightcolumn"] = 1 data = self.request.form.get("data", "") if data: params["data"] = data return urlify(self.request.getURL(), params=params)
def __call__(self): """ Se non c'e' la prenotazione vai all'oggetto padre """ if not self.prenotazione: qs = {} data = self.request.get("data") if data: qs["data"] = data msg = "Not found" IStatusMessage(self.request).add(msg, "warning") target = urlify(self.context.absolute_url(), params=qs) return self.request.response.redirect(target) else: return super(PrenotazionePrint, self).__call__()
def action_book(self, action): """ Book this resource """ data, errors = self.extractData() parsed_data = self.get_parsed_data(data) start_date = data["start_date"] if self.has_slot_conflicts(parsed_data): msg = _( "slot_conflict_error", u"This gate has some booking schedule in this time " u"period.", ) raise ActionExecutionError(Invalid(msg)) elif not self.prenotazioni.is_valid_day(start_date): msg = _("day_error", u"This day is not valid.") raise ActionExecutionError(Invalid(msg)) self.do_book(parsed_data) qs = {"data": data["start_date"].strftime("%d/%m/%Y")} target = urlify(self.context.absolute_url(), params=qs) return self.request.response.redirect(target)
def action_move(self, action): """ Book this resource """ data, errors = self.extractData() data["tipology"] = self.context.getTipologia_prenotazione() conflict_manager = self.prenotazioni_view.conflict_manager current_data = self.context.getData_prenotazione() current = {"booking_date": current_data, "tipology": data["tipology"]} current_slot = conflict_manager.get_choosen_slot(current) current_gate = getattr(self.context, "gate", "") exclude = {current_gate: [current_slot]} if conflict_manager.conflicts(data, exclude=exclude): msg = _( u"Sorry, this slot is not available or does not fit your " u"booking." ) api.portal.show_message(msg, self.request, type="error") raise ActionExecutionError(Invalid(msg)) if self.exceedes_date_limit(data): msg = _(u"Sorry, you can not book this slot for now.") api.portal.show_message(msg, self.request, type="error") raise ActionExecutionError(Invalid(msg)) obj = self.do_move(data) obj # pyflakes msg = _("booking_moved") IStatusMessage(self.request).add(msg, "info") booking_date = data["booking_date"].strftime("%d/%m/%Y") target = urlify( self.prenotazioni_folder.absolute_url(), paths=["prenotazioni_week_view"], params={"data": booking_date}, ) return self.request.response.redirect(target)
def set_download_url(self, data): return urlify( "{}/@@download_reservation".format(self.context.absolute_url()), params=data, )
def next_week_url(self): """ The link to the next week """ qs = {"data": self.next_week} qs.update(self.prenotazioni.remembered_params) return urlify(self.request.getURL(), params=qs)