Пример #1
0
class MRFilterForm(forms.Form):
    """A generic class to filter a list of items"""
    user = forms.ModelChoiceField(
        required=False,
        queryset=User.objects.all(),
        widget=autocomplete_light.ChoiceWidget(
            'UserAutocomplete',
            attrs={'placeholder': 'All Users'}))
    agency = forms.ModelChoiceField(
        required=False,
        queryset=Agency.objects.all(),
        widget=autocomplete_light.ChoiceWidget(
            'AgencyAutocomplete',
            attrs={'placeholder': 'All Agencies'}))
    jurisdiction = forms.ModelChoiceField(
        required=False,
        queryset=Jurisdiction.objects.all(),
        widget=autocomplete_light.ChoiceWidget(
            'JurisdictionAutocomplete',
            attrs={'placeholder': 'All Jurisdictions'}))
    tags = TaggitField(widget=TaggitWidget(
        'TagAutocomplete',
        attrs={
            'placeholder': 'All Tags (comma separated)',
            'data-autocomplete-minimum-characters': 1}))
Пример #2
0
class FoiaMachineRequestFilter(django_filters.FilterSet):
    """Allows FOIA Machine Requests to be filtered by their status, jurisdiction, or agency."""
    jurisdiction = django_filters.ModelChoiceFilter(
        queryset=Jurisdiction.objects.filter(hidden=False),
        widget=autocomplete_light.ChoiceWidget('JurisdictionAutocomplete'))
    agency = django_filters.ModelChoiceFilter(
        queryset=Agency.objects.get_approved(),
        widget=autocomplete_light.ChoiceWidget('AgencyAutocomplete'))

    class Meta:
        model = FoiaMachineRequest
        fields = ['status', 'jurisdiction', 'agency']
Пример #3
0
class ProfileSettingsForm(forms.ModelForm):
    """A form for updating user information"""
    first_name = forms.CharField(max_length=30)
    last_name = forms.CharField(max_length=30)
    location = forms.ModelChoiceField(
        required=False,
        queryset=Jurisdiction.objects.all(),
        widget=autocomplete_light.ChoiceWidget('JurisdictionLocalAutocomplete')
    )

    class Meta():
        model = Profile
        fields = ['first_name', 'last_name', 'avatar', 'twitter', 'location']

    def clean_twitter(self):
        """Stripe @ from beginning of Twitter name, if it exists."""
        twitter = self.cleaned_data['twitter']
        return twitter.split('@')[-1]

    def save(self, commit=True):
        """Modifies associated User model."""
        profile = super(ProfileSettingsForm, self).save(commit)
        profile.user.first_name = self.cleaned_data['first_name']
        profile.user.last_name = self.cleaned_data['last_name']
        profile.user.save()
        return profile
Пример #4
0
class QuestionFilterSet(django_filters.FilterSet):
    """Allows question to be filtered by user, date, or if it's unanswered."""
    user = django_filters.ModelChoiceFilter(
        queryset=User.objects.all(),
        widget=autocomplete_light.ChoiceWidget('UserAutocomplete')
    )
    date = django_filters.DateFromToRangeFilter(
        label='Date Range',
        lookup_expr='contains',
        widget=RangeWidget(attrs={
            'class': 'datepicker',
            'placeholder': 'MM/DD/YYYY',
        }),
    )
    unanswered = django_filters.MethodFilter(
        action='unanswered_filter',
        widget=forms.CheckboxInput()
    )
    tags = django_filters.ModelMultipleChoiceFilter(
        name='tags__name',
        queryset=Tag.objects.all(),
        widget=autocomplete_light.MultipleChoiceWidget('TagAutocomplete'),
    )

    def unanswered_filter(self, queryset, value):
        """Filter to show either only unanswered questions or all questions"""
        # pylint: disable=no-self-use
        if value:
            return queryset.filter(answers__isnull=True)
        else:
            return queryset

    class Meta:
        model = Question
        fields = ['user', 'date']
Пример #5
0
class BulkNewAgencyTaskForm(forms.Form):
    """Form for creating blank new agencies"""
    name = forms.CharField(max_length=255)
    jurisdiction = forms.ModelChoiceField(
        widget=autocomplete_light.ChoiceWidget('JurisdictionAutocomplete'),
        queryset=Jurisdiction.objects.all(),
    )
Пример #6
0
 class Meta:
     model = Organization
     fields = [
         'name', 'owner', 'monthly_requests', 'monthly_cost', 'max_users'
     ]
     widgets = {
         'owner': autocomplete_light.ChoiceWidget('UserAutocomplete')
     }
Пример #7
0
class AgencyFilterSet(django_filters.FilterSet):
    """Allows agencies to be filtered by jurisdiction."""
    jurisdiction = django_filters.ModelChoiceFilter(
        queryset=Jurisdiction.objects.filter(hidden=False),
        widget=autocomplete_light.ChoiceWidget('JurisdictionAutocomplete'))

    class Meta:
        model = Agency
        fields = ['jurisdiction']
 class Meta:
     model = OnTheFly
     fields = ('name', 'other_fly')
     widgets = {
         'other_fly':
         autocomplete_light.ChoiceWidget(
             'OnTheFlyAutocomplete',
             widget_attrs={'data-widget-bootstrap': 'onthefly-widget'})
     }
Пример #9
0
class GroupObjectPermissionAdminForm(forms.ModelForm):
    group = al.ModelChoiceField("GroupAutocomplete")
    permission = PermissionModelChoiceField(
        queryset=Permission.objects.select_related("content_type").filter(
            reduce(operator.or_, PERMISSION_FILTER)
        ),
        label="Permission",
        empty_label="Select A Permssion",
    )
    object_id = forms.CharField(
        widget=al.ChoiceWidget("IPAMObjectsAutoComplete"), label="Object"
    )

    def __init__(self, *args, **kwargs):
        super(GroupObjectPermissionAdminForm, self).__init__(*args, **kwargs)
        if self.instance.pk:
            self.fields["object_id"].initial = "%s-%s" % (
                self.instance.content_type.pk,
                self.instance.object_pk,
            )

    def clean(self):
        cleaned_data = super(GroupObjectPermissionAdminForm, self).clean()

        content_type_id = (
            cleaned_data["object_id"].split("-")[0]
            if cleaned_data.get("object_id")
            else None
        )
        object_pk = (
            cleaned_data["object_id"].split("-")[1]
            if cleaned_data.get("object_id")
            else None
        )
        group = cleaned_data["group"] if cleaned_data.get("group") else None
        permission = (
            cleaned_data["permission"] if cleaned_data.get("permission") else None
        )

        if content_type_id and object_pk and group and permission:
            try:
                GroupObjectPermission.objects.get(
                    group=group,
                    permission=permission,
                    content_type_id=content_type_id,
                    object_pk=object_pk,
                )
            except GroupObjectPermission.DoesNotExist:
                pass
            else:
                raise ValidationError(
                    "Group Permission with this Group, Permission, And Object already exist."
                )

    class Meta:
        model = GroupObjectPermission
        exclude = ("content_type", "object_pk")
Пример #10
0
class JurisdictionFilterSet(django_filters.FilterSet):
    """Allows jurisdiction to be filtered by level of government and state."""
    level = django_filters.ChoiceFilter(choices=LEVELS)
    parent = django_filters.ModelChoiceFilter(
        label='State',
        queryset=Jurisdiction.objects.filter(level='s', hidden=False),
        widget=autocomplete_light.ChoiceWidget('StateAutocomplete'))

    class Meta:
        model = Jurisdiction
        fields = ['level', 'parent']
Пример #11
0
class TaskFilterForm(MRFilterForm):
    """Extends MRFilterForm with a 'show resolved' filter"""
    show_resolved = forms.BooleanField(label='Show resolved', required=False)
    resolved_by = forms.ModelChoiceField(
        label='Resolved by',
        required=False,
        queryset=User.objects.all(),
        widget=autocomplete_light.ChoiceWidget(
            'UserAutocomplete',
            attrs={'placeholder': 'Resolved by'}
        )
    )
Пример #12
0
class JurisdictionFilterForm(MRFilterForm):
    """Adds a level filter to MRFilterForm"""
    levels = (
        ('f', 'Federal'),
        ('s', 'State'),
        ('l', 'Local'),
    )
    level = forms.ChoiceField(choices=levels, widget=forms.RadioSelect)
    parent = forms.ModelChoiceField(required=False,
                                    queryset=Jurisdiction.objects.all(),
                                    widget=autocomplete_light.ChoiceWidget(
                                        'StateAutocomplete',
                                        attrs={'placeholder': 'All States'}))
Пример #13
0
class ExemptionFilterSet(django_filters.FilterSet):
    """Allows exemptions to be filtered by jurisdiction"""
    jurisdiction = django_filters.ModelChoiceFilter(
        label='Jurisdiction',
        queryset=Jurisdiction.objects.filter(
            level__in=('s', 'f'),
            hidden=False,
        ),
        widget=autocomplete_light.ChoiceWidget('FederalStateAutocomplete'))

    class Meta:
        model = Exemption
        fields = ['jurisdiction']
Пример #14
0
class UserObjectPermissionForm(forms.ModelForm):
    permission = PermissionModelChoiceField(
        queryset=Permission.objects.select_related("content_type").filter(
            reduce(operator.or_, PERMISSION_FILTER)
        ),
        label="Permission",
        empty_label="Select A Permssion",
    )
    object_id = forms.CharField(
        widget=al.ChoiceWidget("IPAMObjectsAutoComplete"), label="Object"
    )

    class Meta:
        model = UserObjectPermission
        exclude = ("content_type", "object_pk", "user")
Пример #15
0
class ProfileSettingsForm(forms.ModelForm):
    """A form for updating user information"""
    location = forms.ModelChoiceField(required=False,
                                      queryset=Jurisdiction.objects.all(),
                                      widget=autocomplete_light.ChoiceWidget(
                                          'JurisdictionLocalAutocomplete'))

    class Meta():
        model = Profile
        fields = ['twitter', 'location']

    def clean_twitter(self):
        """Stripe @ from beginning of Twitter name, if it exists."""
        twitter = self.cleaned_data['twitter']
        return twitter.split('@')[-1]
Пример #16
0
class CaseGroupPermissionForm(HelperMixin, forms.Form):
    action_text = _('Grant')
    user = forms.ModelChoiceField(queryset=None,
                                  required=True,
                                  widget=autocomplete_light.ChoiceWidget('UserAutocomplete'),
                                  label=_("User"))
    group = forms.ModelChoiceField(queryset=PermissionGroup.objects.all(),
                                   label=_("Permissions group"))

    def __init__(self, user, case=None, *args, **kwargs):
        self.case = case
        self.user = user
        super(CaseGroupPermissionForm, self).__init__(*args, **kwargs)
        self.fields['user'].queryset = get_user_model().objects.for_user(self.user)
        self.helper.form_class = 'form-inline'
        self.helper.layout.append(Submit('grant', _('Grant')))

        self.helper.form_action = reverse('cases:permission_grant',
                                          kwargs={'pk': str(self.case.pk)})
Пример #17
0
class QuestionFilterSet(django_filters.FilterSet):
    """Allows question to be filtered by user, date, or if it's unanswered."""
    user = django_filters.ModelChoiceFilter(
        queryset=User.objects.all(),
        widget=autocomplete_light.ChoiceWidget('UserAutocomplete'))
    date = django_filters.DateFromToRangeFilter(
        label='Date Range',
        lookup_expr='contains',
        widget=RangeWidget(attrs={
            'class': 'datepicker',
            'placeholder': 'MM/DD/YYYY',
        }),
    )
    unanswered = django_filters.BooleanFilter(name='answers',
                                              lookup_expr='isnull',
                                              widget=forms.CheckboxInput())

    class Meta:
        model = Question
        fields = ['user', 'date']
Пример #18
0
class CrowdsourceFilterSet(django_filters.FilterSet):
    """Filtering for crowdsources for admins"""
    status = django_filters.ChoiceFilter(
        choices=(
            ('draft', 'Draft'),
            ('open', 'Open'),
            ('close', 'Closed'),
        )
    )
    is_staff = django_filters.BooleanFilter(
        name='user__is_staff',
        label='Staff Owned',
        widget=forms.Select(choices=NULL_BOOLEAN_CHOICES),
    )
    user = django_filters.ModelChoiceFilter(
        queryset=User.objects.all(),
        widget=autocomplete_light.ChoiceWidget('UserAutocomplete')
    )

    class Meta:
        model = Crowdsource
        fields = ['status', 'user']
Пример #19
0
class UserObjectPermissionAdminForm(forms.ModelForm):
    user = al.ModelChoiceField("UserAutocomplete")
    permission = PermissionModelChoiceField(
        queryset=Permission.objects.select_related("content_type").filter(
            reduce(operator.or_, PERMISSION_FILTER)
        ),
        label="Permission",
        empty_label="Select A Permssion",
    )
    object_id = forms.CharField(
        widget=al.ChoiceWidget("IPAMObjectsAutoComplete"), label="Object"
    )

    def __init__(self, *args, **kwargs):
        super(UserObjectPermissionAdminForm, self).__init__(*args, **kwargs)
        if self.instance.pk:
            self.fields["object_id"].initial = "%s-%s" % (
                self.instance.content_type.pk,
                self.instance.object_pk,
            )

    class Meta:
        model = UserObjectPermission
        exclude = ("content_type", "object_pk")
Пример #20
0
class NewCaseForm(SingleButtonMixin, PartialMixin, GIODOMixin, autocomplete_light.ModelForm):
    attachment_cls = Attachment
    attachment_rel_field = 'letter'
    attachment_file_field = 'attachment'
    action_text = _("Report case")

    client = forms.ModelChoiceField(queryset=get_user_model().objects.none(),
                                    label=_("Client"),
                                    required=False,
                                    help_text=CLIEN_FIELD_TEXT,
                                    widget=autocomplete_light.ChoiceWidget('UserAutocomplete'))
    email = forms.EmailField(required=False,
                             label=_("User e-mail"))
    email_registration = UserEmailField(required=True,
                                        help_text=EMAIL_TEXT,
                                        label=_("E-mail"))

    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        super(NewCaseForm, self).__init__(*args, **kwargs)
        self.helper.form_tag = False
        self.helper.form_method = 'post'
        self.fields['name'].help_text = CASE_NAME_TEXT

        if self._is_super_staff():
            self.fields['client'].initial = self.user
            self.fields['client'].queryset = (get_user_model().objects.
                                              for_user(self.user).all())
        else:
            del self.fields['client']
            del self.fields['email']

        if not self.user.is_anonymous():  # is registered
            del self.fields['email_registration']

        if not (self.user.is_anonymous() or self._is_super_staff()):
            del self.fields['giodo']
        elif self._is_super_staff():
            self.fields['giodo'].required = False

    def _is_super_staff(self):
        return self.user.has_perm('cases.can_select_client')

    def clean(self):
        if self.user.has_perm('cases.can_select_client') and \
                not (self.cleaned_data.get('email') or self.cleaned_data.get('client')):
            raise ValidationError(_("Have to enter user email or select a client"))
        return super(NewCaseForm, self).clean()

    def get_user(self):
        if self.user.is_anonymous():
            return get_user_model().objects.get_by_email_or_create(
                self.cleaned_data['email_registration'])
        return self.user

    def get_client(self, user):
        if self.user.is_anonymous() and self.cleaned_data['email_registration']:
            return user
        if not self.user.has_perm('cases.can_select_client'):
            return self.user
        elif self.cleaned_data['client']:
            return self.cleaned_data['client']
        elif self.cleaned_data['email']:
            return get_user_model().objects.get_by_email_or_create(self.cleaned_data['email'])
        return self.user

    def get_case(self, client, user):
        case = Case(name=self.cleaned_data['name'], created_by=user, client=client)
        case.save()
        return case