Skip to content
4 changes: 2 additions & 2 deletions src/api/handlers/campaign.py
Original file line number Diff line number Diff line change
Expand Up @@ -651,8 +651,8 @@ def add_campaign_technology_event(self, request):
context: Context = request.context
args: dict = context.args

self.validator.expect("campaign_technology_id", str, is_required=False)
self.validator.expect("event_ids", list, is_required=False)
self.validator.expect("campaign_technology_ids", "str_list", is_required=True)
self.validator.expect("event_ids", list, is_required=True)
args, err = self.validator.verify(args)
if err:
return err
Expand Down
61 changes: 35 additions & 26 deletions src/api/store/campaign.py
Original file line number Diff line number Diff line change
Expand Up @@ -804,40 +804,46 @@ def list_campaign_partners(self, context: Context, args):
except Exception as e:
capture_message(str(e), level="error")
return None, CustomMassenergizeError(e)

def add_campaign_technology_event(self, context: Context, args):
try:
campaign_technology_id = args.pop("campaign_technology_id", None)
campaign_technology_ids = args.pop("campaign_technology_ids", None)
event_ids = args.pop("event_ids", None)

created_list = []

if not campaign_technology_id:
return None, CustomMassenergizeError("campaign_technology_id is required!")
campaign_tech = CampaignTechnology.objects.filter(id=campaign_technology_id).first()
if not campaign_tech:
return None, CustomMassenergizeError("campaignTechnology with id not found!")


data_to_return = []

if not campaign_technology_ids:
return None, CustomMassenergizeError("campaign_technology_ids is required!")

if not event_ids:
return None, CustomMassenergizeError("event_ids is required!")

campaign_techs = CampaignTechnology.objects.filter(id__in=campaign_technology_ids)

if not campaign_techs:
return None, CustomMassenergizeError("No campaignTechnology found!")

if not context.user_is_super_admin:
if context.user_email != campaign_tech.campaign.owner.email:
campaign_manager = CampaignManager.objects.filter(user__id=context.user_id,campaign__id=campaign_tech.campaign.id, is_deleted=False)
campaign = campaign_techs.first().campaign
if context.user_email != campaign.owner.email:
campaign_manager = CampaignManager.objects.filter(user__id=context.user_id,campaign__id=campaign.id, is_deleted=False)
if not campaign_manager:
return None, CustomMassenergizeError("Not authorized to add event")

for event_id in event_ids:
event = Event.objects.filter(id=event_id).first()
if event:
campaign_event, _ = CampaignTechnologyEvent.objects.get_or_create(campaign_technology=campaign_tech, event=event, is_deleted=False)
created_list.append(campaign_event.simple_json())

return created_list, None
return None, CustomMassenergizeError("Unauthorized to add event")

all_events = Event.objects.filter(id__in=event_ids)

combinations = [(campaign_tech, event) for campaign_tech in campaign_techs for event in all_events]

for campaign_tech, event in combinations:
campaign_event, _ = CampaignTechnologyEvent.objects.get_or_create(campaign_technology=campaign_tech, event=event, is_deleted=False)
data_to_return.append(campaign_event.simple_json())

return data_to_return, None

except Exception as e:
capture_message(str(e), level="error")
return None, CustomMassenergizeError(e)

def generate_campaign_link(self, context: Context, args):
try:
campaign_id = args.pop("campaign_id", None)
Expand Down Expand Up @@ -1388,17 +1394,20 @@ def list_campaign_communities_events(self, context: Context, args):
return None, CustomMassenergizeError("campaign_id is required!")
communities = CampaignCommunity.objects.filter(campaign__id=campaign_id, is_deleted=False)
events = []
for community in communities:
events.extend(Event.objects.filter(community__id=community.community.id, is_deleted=False, is_published=True))
community_ids = communities.values_list('community__id', flat=True)

events.extend(Event.objects.filter(community__id__in=community_ids, is_deleted=False, is_published=True, end_date_and_time__gte=datetime.now()))

to_return = []
for event in events:
community = communities.filter(community__id=event.community.id).first()
obj = {
"id": event.id,
"name": event.name,
"community":{
"id": event.community.id,
"name": event.community.name,
"alias": communities.filter(campaign__id=campaign_id, community__id=event.community.id).first().alias
"alias": community.alias if community else None
}
}
to_return.append(obj)
Expand Down
2 changes: 1 addition & 1 deletion src/api/tests/test_campaigns.py
Original file line number Diff line number Diff line change
Expand Up @@ -618,7 +618,7 @@ def test_delete_campaign_technology_comment(self):
self.assertEqual(response['success'], True)

def test_add_campaign_technology_event(self):
payload = {"campaign_technology_id": self.CAMPAIGN_TECHNOLOGY.id, "event_ids": [self.event_1.id],}
payload = {"campaign_technology_ids": [self.CAMPAIGN_TECHNOLOGY.id], "event_ids": [self.event_1.id],}
Console.header("Testing the campaigns.technology.events.add endpoint")
signinAs(self.client, self.SADMIN)
response = self.make_request("campaigns.technology.events.add", payload)
Expand Down