Exemple #1
0
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"
Exemple #2
0
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}
Exemple #3
0
 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)
Exemple #4
0
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}
Exemple #5
0
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
    }
Exemple #6
0
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