def authorized_to_access_visit(visit_id: str, account_id: str) -> bool: """ Checks whether the provided user_id has access to this visit. Only the customer and all hairdressers are allowed to see the visit """ visit = fetch_object(Visits, visit_id) account = fetch_object(Accounts, account_id) return visit["customer_id"] == account_id or account[ "account_type"] == "hairdresser"
def get_visit_details_for_edit(visit_id: str) -> dict: """ Returns visit data needed to render the edit view. """ details_list = {} visit = fetch_object(Visits, visit_id) details_list["salon"] = fetch_object(Salons, visit["salon_id"]) details_list["hairdresser"] = get_account_data(visit["hairdresser_id"]) details_list["services"] = get_visit_services(visit["id"]) details_list["datetime"] = visit["date_start"].strftime("%Y-%m-%d, %H:%M") return {"details_for_edit": details_list}
def get(self, _id=None): if _id: result = fetch_object(Services, _id) return make_response(result, 200) else: result = get_all_services() return make_response(result, 200)
def get_available_hours(data: dict, account_id: str) -> dict: """ Provide fronted dates that the user can use to register his or her visit. :param data: Dict with the following schema {"date": date selected by user, "hairdresserId": hairdresser whose availability needs to be checked, "customerId" : customer whose availability needs to be checked, "serviceDuration: amount of time neeeded for the visit based on services' length, "salonId": salon where the service is supposed to take place} :param account_id: Needed to specify for which user should the date be available :return: Start dates that the user can pick """ available_hours = list() salon = fetch_object(Salons, data["salonId"]) try: date_start = datetime.datetime.strptime( f"{data['date']} {salon['opening_hour']}", "%d/%m/%Y %H:%M") date_end = calculate_end_date(date_start, data["serviceDuration"]) except ValueError as e: raise ValueError("The date format is wrong: " + str(e)) while date_end < datetime.datetime.strptime( f"{data['date']} {salon['closing_hour']}", "%d/%m/%Y %H:%M"): if date_available(date_start, date_end, data["hairdresserId"], account_id)["success"]: available_hours.append( datetime.datetime.strftime(date_start, "%H:%M")) date_start = date_start + datetime.timedelta(minutes=30) date_end = date_end + datetime.timedelta(minutes=30) return {"availableHours": available_hours}
def get_visit_details(visit_id: str, is_customer: bool): """ Return required visit data for FE to render :param visit_id: Id of the visit to be returned :param is_customer: :return: Visit data and id """ details_list = [] visit_raw = fetch_object(Visits, visit_id) details_list.append({ "field_name": "Data wizyty", "field_value": visit_raw["date_start"].strftime("%d.%m.%y, %H:%M") }) details_list.append({ "field_name": "Salon", "field_value": adress_to_string(visit_raw["salon_id"]) }) services = get_visit_services(visit_raw["id"]) details_list.append({ "field_name": "Usługi", "field_value": services_to_string(services) }) details_list.append({ "field_name": "Czas trwania", "field_value": services_total_duration(services) }) details_list.append({ "field_name": "Cena", "field_value": services_total_price(services) }) pictures = get_picture_ids(visit_id) summary_data = {} if not is_customer and (visit_raw["status"] == "FINISHED"): summary_data["summary"] = visit_raw["summary_note"] summary_data["pictures"] = pictures return { "details": details_list, "customerId": visit_raw["customer_id"], "summary": summary_data }
def hairdresser_matches_salon(salon_id: str, hairdresser_id: str) -> bool: hairdresser = fetch_object(Accounts, hairdresser_id) if hairdresser["salon_id"] == salon_id: return True else: return False