1from django import forms
2from django.contrib.contenttypes.models import ContentType
3
4from extras.choices import *
5from extras.models import *
6from extras.utils import FeatureQuery
7from utilities.forms import (
8    BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect, ColorField, ContentTypeChoiceField, StaticSelect,
9)
10
11__all__ = (
12    'ConfigContextBulkEditForm',
13    'CustomFieldBulkEditForm',
14    'CustomLinkBulkEditForm',
15    'ExportTemplateBulkEditForm',
16    'JournalEntryBulkEditForm',
17    'TagBulkEditForm',
18    'WebhookBulkEditForm',
19)
20
21
22class CustomFieldBulkEditForm(BootstrapMixin, BulkEditForm):
23    pk = forms.ModelMultipleChoiceField(
24        queryset=CustomField.objects.all(),
25        widget=forms.MultipleHiddenInput
26    )
27    description = forms.CharField(
28        required=False
29    )
30    required = forms.NullBooleanField(
31        required=False,
32        widget=BulkEditNullBooleanSelect()
33    )
34    weight = forms.IntegerField(
35        required=False
36    )
37
38    class Meta:
39        nullable_fields = []
40
41
42class CustomLinkBulkEditForm(BootstrapMixin, BulkEditForm):
43    pk = forms.ModelMultipleChoiceField(
44        queryset=CustomLink.objects.all(),
45        widget=forms.MultipleHiddenInput
46    )
47    content_type = ContentTypeChoiceField(
48        queryset=ContentType.objects.all(),
49        limit_choices_to=FeatureQuery('custom_fields'),
50        required=False
51    )
52    new_window = forms.NullBooleanField(
53        required=False,
54        widget=BulkEditNullBooleanSelect()
55    )
56    weight = forms.IntegerField(
57        required=False
58    )
59    button_class = forms.ChoiceField(
60        choices=CustomLinkButtonClassChoices,
61        required=False,
62        widget=StaticSelect()
63    )
64
65    class Meta:
66        nullable_fields = []
67
68
69class ExportTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
70    pk = forms.ModelMultipleChoiceField(
71        queryset=ExportTemplate.objects.all(),
72        widget=forms.MultipleHiddenInput
73    )
74    content_type = ContentTypeChoiceField(
75        queryset=ContentType.objects.all(),
76        limit_choices_to=FeatureQuery('custom_fields'),
77        required=False
78    )
79    description = forms.CharField(
80        max_length=200,
81        required=False
82    )
83    mime_type = forms.CharField(
84        max_length=50,
85        required=False
86    )
87    file_extension = forms.CharField(
88        max_length=15,
89        required=False
90    )
91    as_attachment = forms.NullBooleanField(
92        required=False,
93        widget=BulkEditNullBooleanSelect()
94    )
95
96    class Meta:
97        nullable_fields = ['description', 'mime_type', 'file_extension']
98
99
100class WebhookBulkEditForm(BootstrapMixin, BulkEditForm):
101    pk = forms.ModelMultipleChoiceField(
102        queryset=Webhook.objects.all(),
103        widget=forms.MultipleHiddenInput
104    )
105    enabled = forms.NullBooleanField(
106        required=False,
107        widget=BulkEditNullBooleanSelect()
108    )
109    type_create = forms.NullBooleanField(
110        required=False,
111        widget=BulkEditNullBooleanSelect()
112    )
113    type_update = forms.NullBooleanField(
114        required=False,
115        widget=BulkEditNullBooleanSelect()
116    )
117    type_delete = forms.NullBooleanField(
118        required=False,
119        widget=BulkEditNullBooleanSelect()
120    )
121    http_method = forms.ChoiceField(
122        choices=WebhookHttpMethodChoices,
123        required=False
124    )
125    payload_url = forms.CharField(
126        required=False
127    )
128    ssl_verification = forms.NullBooleanField(
129        required=False,
130        widget=BulkEditNullBooleanSelect()
131    )
132    secret = forms.CharField(
133        required=False
134    )
135    ca_file_path = forms.CharField(
136        required=False
137    )
138
139    class Meta:
140        nullable_fields = ['secret', 'ca_file_path']
141
142
143class TagBulkEditForm(BootstrapMixin, BulkEditForm):
144    pk = forms.ModelMultipleChoiceField(
145        queryset=Tag.objects.all(),
146        widget=forms.MultipleHiddenInput
147    )
148    color = ColorField(
149        required=False
150    )
151    description = forms.CharField(
152        max_length=200,
153        required=False
154    )
155
156    class Meta:
157        nullable_fields = ['description']
158
159
160class ConfigContextBulkEditForm(BootstrapMixin, BulkEditForm):
161    pk = forms.ModelMultipleChoiceField(
162        queryset=ConfigContext.objects.all(),
163        widget=forms.MultipleHiddenInput
164    )
165    weight = forms.IntegerField(
166        required=False,
167        min_value=0
168    )
169    is_active = forms.NullBooleanField(
170        required=False,
171        widget=BulkEditNullBooleanSelect()
172    )
173    description = forms.CharField(
174        required=False,
175        max_length=100
176    )
177
178    class Meta:
179        nullable_fields = [
180            'description',
181        ]
182
183
184class JournalEntryBulkEditForm(BootstrapMixin, BulkEditForm):
185    pk = forms.ModelMultipleChoiceField(
186        queryset=JournalEntry.objects.all(),
187        widget=forms.MultipleHiddenInput
188    )
189    kind = forms.ChoiceField(
190        choices=JournalEntryKindChoices,
191        required=False
192    )
193    comments = forms.CharField(
194        required=False,
195        widget=forms.Textarea()
196    )
197
198    class Meta:
199        nullable_fields = []
200