def import_triggers(cls, exported_json, org, user, same_site=False): """ Import triggers from our export file """ from temba.orgs.models import EARLIEST_IMPORT_VERSION if exported_json.get('version', 0) < EARLIEST_IMPORT_VERSION: raise ValueError(_("Unknown version (%s)" % exported_json.get('version', 0))) # first things first, let's create our groups if necesary and map their ids accordingly if 'triggers' in exported_json: for trigger_spec in exported_json['triggers']: # resolve our groups groups = [] for group_spec in trigger_spec['groups']: group = None if same_site: group = ContactGroup.user_groups.filter(org=org, pk=group_spec['id']).first() if not group: group = ContactGroup.user_groups.filter(org=org, name=group_spec['name']).first() if not group: group = ContactGroup.create(org, user, group_spec['name']) if not group.is_active: group.is_active = True group.save() groups.append(group) flow = Flow.objects.get(org=org, pk=trigger_spec['flow']['id']) # see if that trigger already exists trigger = Trigger.objects.filter(org=org, trigger_type=trigger_spec['trigger_type']) if trigger_spec['keyword']: trigger = trigger.filter(keyword__iexact=trigger_spec['keyword']) if groups: trigger = trigger.filter(groups__in=groups) trigger = trigger.first() channel = trigger_spec.get('channel', None) # older exports won't have a channel if trigger: trigger.is_archived = False trigger.flow = flow trigger.save() else: trigger = Trigger.objects.create(org=org, trigger_type=trigger_spec['trigger_type'], keyword=trigger_spec['keyword'], flow=flow, created_by=user, modified_by=user, channel=channel) for group in groups: trigger.groups.add(group)
def create_group(self, name, contacts=(), query=None): if contacts and query: raise ValueError("Can't provide contact list for a dynamic group") group = ContactGroup.create(self.org, self.user, name, query=query) if contacts: group.contacts.add(*contacts) return group
def clean(self, value): if value.startswith("[_NEW_]"): value = value[7:] # we must get groups for this org only group = ContactGroup.get_user_group(self.user.get_org(), value) if not group: group = ContactGroup.create(self.user.get_org(), self.user, name=value) return group return super(RegisterTriggerForm.AddNewGroupChoiceField, self).clean(value)
def _create_groups(self, count, base_names, contacts): """ Creates the given number of groups and fills them with contacts """ groups = [] num_bases = len(base_names) for g in range(0, count): name = '%s %d' % (base_names[g % num_bases], g + 1) group = ContactGroup.create(self.org, self.user, name) group.contacts.add(*contacts[(g % num_bases)::num_bases]) groups.append(ContactGroup.user_groups.get(pk=group.pk)) return groups
def create_group(self, name, contacts): group = ContactGroup.create(self.org, self.user, name) group.contacts.add(*contacts) return group
def import_campaigns(cls, exported_json, org, user, same_site=False): """ Import campaigns from our export file """ from temba.orgs.models import EARLIEST_IMPORT_VERSION if exported_json.get("version", 0) < EARLIEST_IMPORT_VERSION: raise ValueError(_("Unknown version (%s)" % exported_json.get("version", 0))) if "campaigns" in exported_json: for campaign_spec in exported_json["campaigns"]: name = campaign_spec["name"] campaign = None group = None # first check if we have the objects by id if same_site: group = ContactGroup.user_groups.filter( id=campaign_spec["group"]["id"], org=org, is_active=True ).first() if group: group.name = campaign_spec["group"]["name"] group.save() campaign = Campaign.objects.filter(org=org, id=campaign_spec["id"]).first() if campaign: campaign.name = Campaign.get_unique_name(org, name, ignore=campaign) campaign.save() # fall back to lookups by name if not group: group = ContactGroup.user_groups.filter(name=campaign_spec["group"]["name"], org=org).first() if not campaign: campaign = Campaign.objects.filter(org=org, name=name).first() # all else fails, create the objects from scratch if not group: group = ContactGroup.create(org, user, campaign_spec["group"]["name"]) if not campaign: campaign_name = Campaign.get_unique_name(org, name) campaign = Campaign.create(org, user, campaign_name, group) else: campaign.group = group campaign.save() # we want to nuke old single message flows for event in campaign.events.all(): if event.flow.flow_type == Flow.MESSAGE: event.flow.delete() # and all of the events, we'll recreate these campaign.events.all().delete() # fill our campaign with events for event_spec in campaign_spec["events"]: relative_to = ContactField.get_or_create( org, key=event_spec["relative_to"]["key"], label=event_spec["relative_to"]["label"] ) # create our message flow for message events if event_spec["event_type"] == MESSAGE_EVENT: event = CampaignEvent.create_message_event( org, user, campaign, relative_to, event_spec["offset"], event_spec["unit"], event_spec["message"], event_spec["delivery_hour"], ) event.update_flow_name() else: flow = Flow.objects.filter(org=org, id=event_spec["flow"]["id"]).first() if flow: CampaignEvent.create_flow_event( org, user, campaign, relative_to, event_spec["offset"], event_spec["unit"], flow, event_spec["delivery_hour"], ) # update our scheduled events for this campaign EventFire.update_campaign_events(campaign)
def save(self, obj): obj.org = self.request.user.get_org() self.object = ContactGroup.create(obj.org, self.request.user, obj.name)
def import_campaigns(cls, exported_json, org, user, site=None): """ Import campaigns from our export file """ from temba.orgs.models import EARLIEST_IMPORT_VERSION if exported_json.get('version', 0) < EARLIEST_IMPORT_VERSION: raise ValueError(_("Unknown version (%s)" % exported_json.get('version', 0))) if 'campaigns' in exported_json: for campaign_spec in exported_json['campaigns']: name = campaign_spec['name'] campaign = None group = None # first check if we have the objects by id if site and site == exported_json.get('site', None): group = ContactGroup.user_groups.filter(id=campaign_spec['group']['id'], org=org, is_active=True).first() if group: group.name = campaign_spec['group']['name'] group.save() campaign = Campaign.objects.filter(org=org, id=campaign_spec['id']).first() if campaign: campaign.name = Campaign.get_unique_name(name, org, ignore=campaign) campaign.save() # fall back to lookups by name if not group: group = ContactGroup.user_groups.filter(name=campaign_spec['group']['name'], org=org).first() if not campaign: campaign = Campaign.objects.filter(org=org, name=name).first() # all else fails, create the objects from scratch if not group: group = ContactGroup.create(org, user, campaign_spec['group']['name']) if not campaign: campaign = Campaign.objects.create(name=Campaign.get_unique_name(name, org), org=org, group=group, created_by=user, modified_by=user) else: campaign.group = group campaign.save() # we want to nuke old single message flows for event in campaign.events.all(): if event.flow.flow_type == Flow.MESSAGE: event.flow.delete() # and all of the events, we'll recreate these campaign.events.all().delete() # fill our campaign with events for event_spec in campaign_spec['events']: relative_to = ContactField.get_or_create(org, key=event_spec['relative_to']['key'], label=event_spec['relative_to']['label']) # create our message flow for message events if event_spec['event_type'] == MESSAGE_EVENT: flow = Flow.create_single_message(org, user, event_spec['message']) else: flow = Flow.objects.filter(org=org, id=event_spec['flow']['id']).first() if flow: event = campaign.events.create(created_by=user, modified_by=user, offset=event_spec['offset'], unit=event_spec['unit'], event_type=event_spec['event_type'], delivery_hour=event_spec['delivery_hour'], message=event_spec['message'], flow=flow, relative_to=relative_to) event.update_flow_name() # update our scheduled events for this campaign EventFire.update_campaign_events(campaign)
def import_triggers(cls, exported_json, org, user, same_site=False): """ Import triggers from our export file """ from temba.orgs.models import EARLIEST_IMPORT_VERSION if exported_json.get('version', 0) < EARLIEST_IMPORT_VERSION: raise ValueError( _("Unknown version (%s)" % exported_json.get('version', 0))) # first things first, let's create our groups if necesary and map their ids accordingly if 'triggers' in exported_json: for trigger_spec in exported_json['triggers']: # resolve our groups groups = [] for group_spec in trigger_spec['groups']: group = None if same_site: group = ContactGroup.user_groups.filter( org=org, pk=group_spec['id']).first() if not group: group = ContactGroup.get_user_group( org, group_spec['name']) if not group: group = ContactGroup.create(org, user, group_spec['name']) if not group.is_active: group.is_active = True group.save() groups.append(group) flow = Flow.objects.get(org=org, pk=trigger_spec['flow']['id']) # see if that trigger already exists trigger = Trigger.objects.filter( org=org, trigger_type=trigger_spec['trigger_type']) if trigger_spec['keyword']: trigger = trigger.filter( keyword__iexact=trigger_spec['keyword']) if groups: trigger = trigger.filter(groups__in=groups) trigger = trigger.first() if trigger: trigger.is_archived = False trigger.flow = flow trigger.save() else: # if we have a channel resolve it channel = trigger_spec.get( 'channel', None) # older exports won't have a channel if channel: channel = Channel.objects.filter(pk=channel.pk, org=org).first() trigger = Trigger.objects.create( org=org, trigger_type=trigger_spec['trigger_type'], keyword=trigger_spec['keyword'], flow=flow, created_by=user, modified_by=user, channel=channel) for group in groups: trigger.groups.add(group)
def import_campaigns(cls, exported_json, org, user, same_site=False): """ Import campaigns from our export file """ from temba.orgs.models import EARLIEST_IMPORT_VERSION if exported_json.get('version', 0) < EARLIEST_IMPORT_VERSION: raise ValueError( _("Unknown version (%s)" % exported_json.get('version', 0))) if 'campaigns' in exported_json: for campaign_spec in exported_json['campaigns']: name = campaign_spec['name'] campaign = None group = None # first check if we have the objects by id if same_site: group = ContactGroup.user_groups.filter( id=campaign_spec['group']['id'], org=org, is_active=True).first() if group: group.name = campaign_spec['group']['name'] group.save() campaign = Campaign.objects.filter( org=org, id=campaign_spec['id']).first() if campaign: campaign.name = Campaign.get_unique_name( name, org, ignore=campaign) campaign.save() # fall back to lookups by name if not group: group = ContactGroup.user_groups.filter( name=campaign_spec['group']['name'], org=org).first() if not campaign: campaign = Campaign.objects.filter(org=org, name=name).first() # all else fails, create the objects from scratch if not group: group = ContactGroup.create(org, user, campaign_spec['group']['name']) if not campaign: campaign_name = Campaign.get_unique_name(name, org) campaign = Campaign.create(org, user, campaign_name, group) else: campaign.group = group campaign.save() # we want to nuke old single message flows for event in campaign.events.all(): if event.flow.flow_type == Flow.MESSAGE: event.flow.delete() # and all of the events, we'll recreate these campaign.events.all().delete() # fill our campaign with events for event_spec in campaign_spec['events']: relative_to = ContactField.get_or_create( org, key=event_spec['relative_to']['key'], label=event_spec['relative_to']['label']) # create our message flow for message events if event_spec['event_type'] == MESSAGE_EVENT: event = CampaignEvent.create_message_event( org, user, campaign, relative_to, event_spec['offset'], event_spec['unit'], event_spec['message'], event_spec['delivery_hour']) event.update_flow_name() else: flow = Flow.objects.filter( org=org, id=event_spec['flow']['id']).first() if flow: CampaignEvent.create_flow_event( org, user, campaign, relative_to, event_spec['offset'], event_spec['unit'], flow, event_spec['delivery_hour']) # update our scheduled events for this campaign EventFire.update_campaign_events(campaign)