class ScheduleTriggerForm(BaseScheduleForm, forms.ModelForm): repeat_period = forms.ChoiceField(choices=repeat_choices, label="Repeat") repeat_days = forms.IntegerField(required=False) start = forms.CharField(max_length=16) start_datetime_value = forms.IntegerField(required=False) flow = forms.ModelChoiceField(Flow.objects.filter(pk__lt=0), label=_("Flow"), required=True) omnibox = OmniboxField( label=_('Contacts'), required=True, help_text=_("The groups and contacts the flow will be broadcast to")) def __init__(self, user, *args, **kwargs): super(ScheduleTriggerForm, self).__init__(*args, **kwargs) self.user = user self.fields['omnibox'].set_user(user) self.fields['flow'].queryset = Flow.objects.filter( org=self.user.get_org(), is_active=True, is_archived=False).exclude(flow_type=Flow.MESSAGE) def clean(self): data = super(ScheduleTriggerForm, self).clean() # only weekly gets repeat days if data['repeat_period'] != 'W': data['repeat_days'] = None return data class Meta: model = Trigger fields = ('flow', 'omnibox', 'repeat_period', 'repeat_days', 'start', 'start_datetime_value')
class SendMessageForm(Form): omnibox = OmniboxField() text = forms.CharField(widget=forms.Textarea, max_length=640) schedule = forms.BooleanField(widget=forms.HiddenInput, required=False) step_node = forms.CharField(widget=forms.HiddenInput, max_length=36, required=False) def __init__(self, user, *args, **kwargs): super().__init__(*args, **kwargs) self.user = user self.fields["omnibox"].set_user(user) def is_valid(self): valid = super().is_valid() if valid: if ("step_node" not in self.data or not self.data["step_node"] ) and ("omnibox" not in self.data or len(self.data["omnibox"].strip()) == 0): self.errors["__all__"] = self.error_class( [str(_("At least one recipient is required"))]) return False return valid def clean(self): cleaned = super().clean() if self.user.get_org().is_suspended(): raise ValidationError( _("Sorry, your account is currently suspended. To enable sending messages, please contact support." )) return cleaned
class BroadcastForm(forms.ModelForm): message = forms.CharField(required=True, widget=forms.Textarea, max_length=160) omnibox = OmniboxField() def __init__(self, user, *args, **kwargs): super(BroadcastForm, self).__init__(*args, **kwargs) self.fields['omnibox'].set_user(user) def is_valid(self): valid = super(BroadcastForm, self).is_valid() if valid: if 'omnibox' not in self.data or len( self.data['omnibox'].strip()) == 0: self.errors['__all__'] = self.error_class( [_("At least one recipient is required")]) return False else: print "omni: '%s'" % self.data['omnibox'] return valid class Meta: model = Broadcast
class BroadcastForm(forms.ModelForm): message = forms.CharField( required=True, widget=CompletionTextarea(attrs={"placeholder": _("Hi @contact.name!")}), max_length=Broadcast.MAX_TEXT_LEN, ) omnibox = OmniboxField() def __init__(self, user, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["omnibox"].set_user(user) def is_valid(self): valid = super().is_valid() if valid: if "omnibox" not in self.data or len(self.data["omnibox"].strip()) == 0: # pragma: needs cover self.errors["__all__"] = self.error_class([_("At least one recipient is required")]) return False return valid class Meta: model = Broadcast fields = "__all__"
class ScheduleTriggerForm(BaseScheduleForm, forms.ModelForm): repeat_period = forms.ChoiceField(choices=Schedule.REPEAT_CHOICES, label="Repeat") repeat_days_of_week = forms.CharField(required=False) start = forms.ChoiceField(choices=(("stop", "Stop Schedule"), ("later", "Schedule for later"))) start_datetime_value = forms.IntegerField(required=False) flow = forms.ModelChoiceField(Flow.objects.filter(pk__lt=0), label=_("Flow"), required=True) omnibox = OmniboxField( label=_("Contacts"), required=True, help_text=_("The groups and contacts the flow will be broadcast to")) def __init__(self, user, *args, **kwargs): super().__init__(*args, **kwargs) self.user = user self.fields["omnibox"].set_user(user) flows = Flow.get_triggerable_flows(user.get_org()) self.fields["flow"].queryset = flows class Meta: model = Trigger fields = ("flow", "omnibox", "repeat_period", "repeat_days_of_week", "start", "start_datetime_value")
class ScheduleTriggerForm(BaseScheduleForm, forms.ModelForm): repeat_period = forms.ChoiceField(choices=Schedule.REPEAT_CHOICES, label="Repeat") repeat_days = forms.IntegerField(required=False) start = forms.CharField(max_length=16) start_datetime_value = forms.IntegerField(required=False) flow = forms.ModelChoiceField(Flow.objects.filter(pk__lt=0), label=_("Flow"), required=True) omnibox = OmniboxField( label=_("Contacts"), required=True, help_text=_("The groups and contacts the flow will be broadcast to")) def __init__(self, user, *args, **kwargs): super().__init__(*args, **kwargs) self.user = user self.fields["omnibox"].set_user(user) flows = Flow.get_triggerable_flows(user.get_org()) self.fields["flow"].queryset = flows def clean(self): data = super().clean() # only weekly gets repeat days if data["repeat_period"] != "W": data["repeat_days"] = None return data class Meta: model = Trigger fields = ("flow", "omnibox", "repeat_period", "repeat_days", "start", "start_datetime_value")
class SendMessageForm(Form): omnibox = OmniboxField() text = forms.CharField(widget=forms.Textarea, max_length=640) schedule = forms.BooleanField(widget=forms.HiddenInput, required=False) def __init__(self, user, *args, **kwargs): super(SendMessageForm, self).__init__(*args, **kwargs) self.fields['omnibox'].set_user(user) def is_valid(self): valid = super(SendMessageForm, self).is_valid() if valid: if 'omnibox' not in self.data or len(self.data['omnibox'].strip()) == 0: self.errors['__all__'] = self.error_class([unicode(_("At least one recipient is required"))]) return False return valid
class BroadcastForm(forms.ModelForm): message = forms.CharField(required=True, widget=forms.Textarea, max_length=160) omnibox = OmniboxField() def __init__(self, user, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["omnibox"].set_user(user) def is_valid(self): valid = super().is_valid() if valid: if "omnibox" not in self.data or len( self.data["omnibox"].strip()) == 0: # pragma: needs cover self.errors["__all__"] = self.error_class( [_("At least one recipient is required")]) return False return valid class Meta: model = Broadcast fields = "__all__"