def patch_offer(offer_id: str, body: offers_serialize.PatchOfferBodyModel) -> offers_serialize.OfferResponseIdModel: offer = load_or_404(Offer, human_id=offer_id) check_user_has_access_to_offerer(current_user, offer.venue.managingOffererId) offer = offers_api.update_offer(offer, **body.dict(exclude_unset=True)) return offers_serialize.OfferResponseIdModel.from_orm(offer)
def patch_offer(offer_id: str, body: PatchOfferBodyModel) -> OfferResponseIdModel: offer = load_or_404(Offer, human_id=offer_id) ensure_current_user_has_rights(RightsType.editor, offer.venue.managingOffererId) offer = offers_api.update_offer(offer, **body.dict(exclude_unset=True)) return OfferResponseIdModel.from_orm(offer)
def add_to_favorite(): mediation = None offer_id = request.json.get("offerId") mediation_id = request.json.get("mediationId") check_offer_id_is_present_in_request(offer_id) offer = load_or_404(Offer, offer_id) if mediation_id is not None: mediation = load_or_404(Mediation, mediation_id) favorite_sql_entity = FavoriteSQLEntity() favorite_sql_entity.mediation = mediation favorite_sql_entity.offer = offer favorite_sql_entity.user = current_user repository.save(favorite_sql_entity) favorite = favorite_domain_converter.to_domain(favorite_sql_entity) return jsonify(serialize_favorite(favorite)), 201
def deactivate_venue_offers(venue_id): venue = load_or_404(VenueSQLEntity, venue_id) ensure_current_user_has_rights(RightsType.editor, venue.managingOffererId) offers = venue.offers deactivated_offers = update_is_active_status(offers, False) repository.save(*deactivated_offers) if feature_queries.is_active(FeatureToggle.SYNCHRONIZE_ALGOLIA): redis.add_venue_id(client=app.redis_client, venue_id=venue.id) return jsonify([ as_dict(offer, includes=OFFER_INCLUDES) for offer in deactivated_offers ]), 200
def activate_venue_offers(venue_id): venue = load_or_404(Venue, venue_id) check_user_has_access_to_offerer(current_user, venue.managingOffererId) offers = venue.offers activated_offers = update_is_active_status(offers, True) repository.save(*activated_offers) if feature_queries.is_active(FeatureToggle.SYNCHRONIZE_ALGOLIA): redis.add_venue_id(client=app.redis_client, venue_id=venue.id) return jsonify([ as_dict(offer, includes=OFFER_INCLUDES) for offer in activated_offers ]), 200
def generate_api_key_route(offerer_id: str) -> GenerateOffererApiKeyResponse: check_user_has_access_to_offerer(current_user, dehumanize(offerer_id)) offerer = load_or_404(Offerer, offerer_id) try: clear_key = api.generate_and_save_api_key(offerer.id) except ApiKeyCountMaxReached: raise ApiErrors({"api_key_count_max": "Le nombre de clés maximal a été atteint"}) except ApiKeyPrefixGenerationError: raise ApiErrors({"api_key": "Could not generate api key"}) return GenerateOffererApiKeyResponse(apiKey=clear_key)
def upsert_venue_banner(venue_id: str) -> None: venue = load_or_404(Venue, venue_id) check_user_has_access_to_offerer(current_user, venue.managingOffererId) venue_banner = venues_serialize.VenueBannerContentModel.from_request(request) offerers_api.save_venue_banner( user=current_user, venue=venue, content=venue_banner.content, content_type=venue_banner.content_type, file_name=venue_banner.file_name, )
def get_venue_stats(humanized_venue_id: str) -> VenueStatsResponseModel: venue = load_or_404(Venue, humanized_venue_id) check_user_has_access_to_offerer(current_user, venue.managingOffererId) active_bookings_quantity = get_legacy_active_bookings_quantity_for_venue(venue.id) validated_bookings_count = get_legacy_validated_bookings_quantity_for_venue(venue.id) active_offers_count = get_active_offers_count_for_venue(venue.id) sold_out_offers_count = get_sold_out_offers_count_for_venue(venue.id) return VenueStatsResponseModel( activeBookingsQuantity=active_bookings_quantity, validatedBookingsQuantity=validated_bookings_count, activeOffersCount=active_offers_count, soldOutOffersCount=sold_out_offers_count, )
def get_providers_by_venue(venue_id: str): venue = load_or_404(VenueSQLEntity, venue_id) has_allocine_pivot = has_allocine_pivot_for_venue(venue) if has_allocine_pivot: providers = get_enabled_providers_for_pro() else: allocine_local_class = AllocineStocks.__name__ providers = get_providers_enabled_for_pro_excluding_specific_provider( allocine_local_class) result = [] for provider in providers: provider_dict = as_dict(provider) del provider_dict["apiKey"] del provider_dict["apiKeyGenerationDate"] result.append(provider_dict) return jsonify(result)
def get_providers_by_venue(venue_id: str): venue = load_or_404(Venue, venue_id) has_allocine_pivot = has_allocine_pivot_for_venue(venue) if has_allocine_pivot: providers = get_enabled_providers_for_pro() else: allocine_local_class = AllocineStocks.__name__ providers = get_providers_enabled_for_pro_excluding_specific_provider( allocine_local_class) result = [] for provider in providers: provider_dict = as_dict(provider) del provider_dict["apiUrl"] del provider_dict["authToken"] del provider_dict["pricesInCents"] result.append(provider_dict) return jsonify(result)
def get_venues_by_offerer_with_stats(humanized_offerer_id: str) -> GetOffererResponseModel: check_user_has_access_to_offerer(current_user, dehumanize(humanized_offerer_id)) offerer = load_or_404(Offerer, humanized_offerer_id) venue_stats_by_ids = {} active_bookings_quantity_by_venue = get_active_bookings_quantity_for_offerer(offerer.id) validated_bookings_quantity_by_venue = get_validated_bookings_quantity_for_offerer(offerer.id) for managedVenue in offerer.managedVenues: active_offers_count = get_active_offers_count_for_venue(managedVenue.id) sold_out_offers_count = get_sold_out_offers_count_for_venue(managedVenue.id) venue_stats_by_ids[managedVenue.id] = VenueStatsResponseModel( activeBookingsQuantity=active_bookings_quantity_by_venue.get(managedVenue.id, 0), validatedBookingsQuantity=validated_bookings_quantity_by_venue.get(managedVenue.id, 0), activeOffersCount=active_offers_count, soldOutOffersCount=sold_out_offers_count, ) return GetOffererResponseModel.from_orm(offerer, venue_stats_by_ids)
def edit_venue(venue_id): venue = load_or_404(Venue, venue_id) previous_venue = copy.deepcopy(venue) check_valid_edition(request, venue) validate_coordinates(request.json.get("latitude", None), request.json.get("longitude", None)) check_user_has_access_to_offerer(current_user, venue.managingOffererId) venue.populate_from_dict(request.json) if not venue.isVirtual: delete_venue_from_iris_venues(venue.id) repository.save(venue) link_valid_venue_to_irises(venue) if is_algolia_indexing(previous_venue, request.json): if feature_queries.is_active(FeatureToggle.SYNCHRONIZE_ALGOLIA): redis.add_venue_id(client=app.redis_client, venue_id=dehumanize(venue_id)) return jsonify(as_dict(venue, includes=VENUE_INCLUDES)), 200
def edit_venue(venue_id: str, body: EditVenueBodyModel) -> GetVenueResponseModel: venue = load_or_404(Venue, venue_id) check_user_has_access_to_offerer(current_user, venue.managingOffererId) not_venue_fields = { "isAccessibilityAppliedOnAllOffers", "isEmailAppliedOnAllOffers", "isWithdrawalAppliedOnAllOffers", "contact", } update_venue_attrs = body.dict(exclude=not_venue_fields, exclude_unset=True) venue_attrs = as_dict(venue) accessibility_fields = [ "audioDisabilityCompliant", "mentalDisabilityCompliant", "motorDisabilityCompliant", "visualDisabilityCompliant", ] have_accessibility_changes = any( (field in update_venue_attrs and update_venue_attrs[field] != venue_attrs[field]) for field in accessibility_fields ) have_withdrawal_details_changes = body.withdrawalDetails != venue.withdrawalDetails venue = offerers_api.update_venue(venue, body.contact, **update_venue_attrs) venue_attrs = as_dict(venue) if have_accessibility_changes and body.isAccessibilityAppliedOnAllOffers: edited_accessibility = {field: venue_attrs[field] for field in accessibility_fields} update_all_venue_offers_accessibility_job.delay(venue, edited_accessibility) if FeatureToggle.ENABLE_VENUE_WITHDRAWAL_DETAILS.is_active(): if have_withdrawal_details_changes and body.isWithdrawalAppliedOnAllOffers: update_all_venue_offers_withdrawal_details_job.delay(venue, body.withdrawalDetails) if body.bookingEmail and body.isEmailAppliedOnAllOffers: update_all_venue_offers_email_job.delay(venue, body.bookingEmail) return GetVenueResponseModel.from_orm(venue)
def patch_user_tuto_seen(user_id: str) -> None: user = load_or_404(User, user_id) _ensure_current_user_has_rights(user_id) set_pro_tuto_as_seen(user)
def get_offerer(offerer_id: str) -> GetOffererResponseModel: check_user_has_access_to_offerer(current_user, dehumanize(offerer_id)) offerer = load_or_404(Offerer, offerer_id) return GetOffererResponseModel.from_orm(offerer)
def get_offer(offer_id: str) -> offers_serialize.GetOfferResponseModel: offer = load_or_404(Offer, offer_id) return offers_serialize.GetOfferResponseModel.from_orm(offer)
def get_venue(venue_id: str) -> GetVenueResponseModel: venue = load_or_404(Venue, venue_id) check_user_has_access_to_offerer(current_user, venue.managingOffererId) return GetVenueResponseModel.from_orm(venue)
def get_offer(offer_id: str) -> GetOfferResponseModel: offer = load_or_404(Offer, offer_id) return GetOfferResponseModel(**as_dict(offer, includes=OFFER_INCLUDES))
def get_offerer(offerer_id): ensure_current_user_has_rights(RightsType.editor, dehumanize(offerer_id)) offerer = load_or_404(Offerer, offerer_id) return jsonify(get_dict_offerer(offerer)), 200
def get_venue(venue_id): venue = load_or_404(VenueSQLEntity, venue_id) ensure_current_user_has_rights(RightsType.editor, venue.managingOffererId) return jsonify(as_dict(venue, includes=VENUE_INCLUDES)), 200
def get_venue(venue_id): venue = load_or_404(Venue, venue_id) check_user_has_access_to_offerer(current_user, venue.managingOffererId) return jsonify(as_dict(venue, includes=VENUE_INCLUDES)), 200