diff --git a/accounts/urls.py b/accounts/urls.py index f8f0d1b..99c99c9 100644 --- a/accounts/urls.py +++ b/accounts/urls.py @@ -24,7 +24,7 @@ urlpatterns = [ path('principal/add/', views.PrincipalCreateOrUpdateView.as_view(), name="principal_add"), path('principal/edit/', views.PrincipalCreateOrUpdateView.as_view(), name="principal_edit"), # path('principal/delete/', views.PrincipalDeleteView.as_view(), name="principal_delete"), - path('principal/resource/permission/edit//', views.PrincipalResourcePermissionEditView.as_view(), + path('principal/resource/permission/edit//', views.PrincipalResourcePermissionEditView.as_view(), name="principal_resource_permission_edit"), path('principal/group/link/', views.PrincipalGroupLinkListView.as_view(), name="principal_group_link_list"), diff --git a/accounts/views.py b/accounts/views.py index 6aa85b4..8602b44 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -1210,7 +1210,7 @@ class CustomerImportView(LoginRequiredMixin, generic.View): register_complete=True, principal_type=principal_type, business_name=business_name, - phone_no=str(phone_no), + phone_no=phone_no, address_line1=address, city=region, country=country, diff --git a/manage_events/api/urls.py b/manage_events/api/urls.py index 24e86b7..1937875 100644 --- a/manage_events/api/urls.py +++ b/manage_events/api/urls.py @@ -141,4 +141,6 @@ urlpatterns = [ views.EventListView.as_view(), name="event_filter", ), + + path("post-to-social-media//", views.SocialMediaPostView.as_view(), name="social_media_post") ] diff --git a/manage_events/api/views.py b/manage_events/api/views.py index b6a6a9a..7ce903f 100644 --- a/manage_events/api/views.py +++ b/manage_events/api/views.py @@ -13,7 +13,7 @@ from django.db.models import Q, Count from taggit.models import Tag from django.utils.dateparse import parse_date from goodtimes import services -from goodtimes.services import GoogleMapsservice +from goodtimes.services import FacebookAPI, FacebookPoster, GoogleMapsservice, InstagramAPI, InstagramPoster, TwitterAPI, TwitterPoster from goodtimes.utils import ApiResponse, CapacityError from rest_framework.permissions import IsAuthenticated from rest_framework_simplejwt.authentication import JWTAuthentication @@ -1124,4 +1124,80 @@ class EventListView(generics.ListAPIView): return self.get_paginated_response(serializer.data) serializer = self.get_serializer(queryset, many=True) - return ApiResponse.success(message=constants.SUCCESS, data=serializer.data) \ No newline at end of file + return ApiResponse.success(message=constants.SUCCESS, data=serializer.data) + + +from rest_framework.response import Response +class SocialMediaPostView(APIView): + def get(self, request, *args, **kwargs): + platform = request.query_params.get("platform", "") + event_id = kwargs.get("id") + print(platform, event_id) + errors = [] + success_messages = [] + + try: + event = Event.objects.get(id=event_id) + except Event.DoesNotExist: + errors.append("Event does not exist") + return Response({ + 'message': "Error in posting to social media", + 'errors': errors, + 'success_messages': success_messages + }, status=400) + + if not event.active: + errors.append("Event is not active") + return Response({ + 'message': "Error in posting to social media", + 'errors': errors, + 'success_messages': success_messages + }, status=400) + + caption = f"{event.title}\nDuration: {event.start_date} to {event.end_date}\nAddress: {event.venue.address}" + + if platform in ['instagram', 'facebook', 'twitter', 'all']: + if platform in ['twitter', 'all']: + image_url = event.image.path + twitter_api = TwitterAPI() + twitter_poster = TwitterPoster(twitter_api) + result = twitter_poster.post_image_with_caption(image_url, caption) + if result['success']: + success_messages.append("Posted to Twitter successfully") + else: + errors.append("Fail to post on Twitter") + + image_url = request.build_absolute_uri(event.image.url) + if platform in ['facebook', 'all']: + facebook_api = FacebookAPI() + facebook_poster = FacebookPoster(facebook_api) + result = facebook_poster.post_photo(image_url, caption) + if result["success"]: + success_messages.append("Posted to Facebook successfully") + else: + errors.append("Fail to post on Facebook") + + if platform in ['instagram', 'all']: + instagram_api = InstagramAPI() + instagram_poster = InstagramPoster(instagram_api) + result = instagram_poster.post_image_with_caption(image_url, caption) + if result["success"]: + success_messages.append("Posted to Instagram successfully") + else: + errors.append("Fail to post on Instagram") + + if not errors: + return Response({'message': 'Post Successful', 'errors': errors, 'success_messages': success_messages}) + + if errors and success_messages: + return Response({ + 'message': 'Some posts succeeded while others failed', + 'errors': errors, + 'success_messages': success_messages + }, status=200) + + return Response({ + 'message': 'Error in posting to social media', + 'errors': errors, + 'success_messages': success_messages + }, status=400) \ No newline at end of file diff --git a/templates/includes/dynamic_template_form.html b/templates/includes/dynamic_template_form.html index 060eaee..b8be13b 100644 --- a/templates/includes/dynamic_template_form.html +++ b/templates/includes/dynamic_template_form.html @@ -60,7 +60,7 @@ {% endif %} {% if field.errors %} -
+
{% for error in field.errors %}

{{ error }}

{% endfor %}