Ejemplo n.º 1
0
class EventCreationForm(forms.ModelForm):
    poll_timeframe_start = forms.DateTimeField(widget=widgets.DateTimeInput(
        format="%m/%d/%Y %H:%M:%S",
        attrs={'placeholder': "MM/DD/YYYY HH:MM:SS"}), )

    poll_timeframe_end = forms.DateTimeField(widget=widgets.DateTimeInput(
        format="%m/%d/%Y %H:%M:%S",
        attrs={'placeholder': "MM/DD/YYYY HH:MM:SS"}), )

    poll_end = forms.DateTimeField(widget=widgets.DateTimeInput(
        format="%m/%d/%Y %H:%M:%S",
        attrs={'placeholder': "MM/DD/YYYY HH:MM:SS"}), )

    class Meta:
        model = Event
        fields = ('name', 'location', 'description', 'poll_timeframe_start',
                  'poll_timeframe_end', 'poll_end', 'event_length',
                  'is_public', 'allow_flex', 'on_time_attendees')
        labels = {
            "is_public": "Do you want to make this a public event?",
            "allow_flex":
            "Are you willing to shorten the event by up to 20 minutes to maximize attendance?",
            "on_time_attendees": "Can attendees arrive late or leave early?"
        }
        widgets = {
            'location': GooglePointFieldWidget,
        }
Ejemplo n.º 2
0
 class Meta:
     model = OpenHouse
     exclude = ['id', 'listingid']
     widgets = {
         'openhousestart': widgets.DateTimeInput(attrs={'type': 'date'}),
         'openhouseend': widgets.DateTimeInput(attrs={'type': 'date'}),
     }
Ejemplo n.º 3
0
class EventForm(forms.Form):
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        # self.tags = Tag.objects.all()
        super(EventForm, self).__init__(*args, **kwargs)

    event_name = forms.CharField(max_length=400, required=True)
    photo = forms.ImageField(max_length=100, required=True)
    description = forms.CharField(max_length=600,
                                  required=False,
                                  widget=forms.Textarea)
    start = forms.DateTimeField(
        widget=widgets.DateTimeInput(attrs={'class': '_datetimepicker'}),
        required=True)
    end = forms.DateTimeField(
        widget=widgets.DateTimeInput(attrs={'class': '_datetimepicker'}),
        required=True)
    price = forms.DecimalField(
        widget=widgets.NumberInput(attrs={'step': 0.50}),
        max_digits=10,
        decimal_places=2,
        required=True)
    source = forms.URLField(required=False)
    location = forms.CharField(max_length=255, required=True)
    location_gmaps_place_id = forms.CharField(widget=forms.HiddenInput(),
                                              max_length=255,
                                              required=True)
    categories = forms.MultipleChoiceField(
        widget=CategoryCheckboxSelectMultiple(attrs={'class': 'category'}),
        choices=get_tags)
Ejemplo n.º 4
0
 class Meta:
     model = room_models.Room
     fields = (
         "name",
         "description",
         "country",
         "city",
         "price",
         "address",
         "guests",
         "beds",
         "bedrooms",
         "baths",
         "room_type",
         "amenities",
         "facilities",
         "house_rules",
         "check_in",
         "check_out",
         "instant_book",
     )
     widgets = {
         "check_in": widgets.DateTimeInput(format="%Y-%m-%d %H:%M:%S"),
         "check_out": widgets.DateTimeInput(format="%Y-%m-%d %H:%M:%S"),
     }
Ejemplo n.º 5
0
 class Meta:
     model = models.DomainTop
     fields = "__all__"
     widgets = {
         'domain_name':
         form_widgets.TextInput(attrs={'class': 'form-control'}),
         'creation_date':
         form_widgets.DateTimeInput(attrs={'class': 'form-control'}),
         'expiration_date':
         form_widgets.DateTimeInput(attrs={'class': 'form-control'}),
         'icp_num':
         form_widgets.TextInput(attrs={'class': 'form-control'}),
         'gongan_num':
         form_widgets.TextInput(attrs={'class': 'form-control'}),
         'ssl_creation_date':
         form_widgets.DateInput(attrs={'class': 'form-control'}),
         'ssl_expiration_date':
         form_widgets.DateInput(attrs={'class': 'form-control'}),
         'ssl_brand':
         form_widgets.TextInput(attrs={'class': 'form-control'}),
         'ssl_proxy':
         form_widgets.TextInput(attrs={'class': 'form-control'}),
         'is_public':
         form_widgets.NullBooleanSelect(attrs={'class': 'form-control'}),
     }
     error_messages = {
         'domain_name': {
             'required': '*名称不能为空'
         },
     }
Ejemplo n.º 6
0
 class Meta(object):
     """Form attributes that are not fields."""
     model = models.Lend
     fields = ['item_id', 'user_id', 'due_out', 'due_back', 'out', 'back']
     widgets = {
         'due_out':  widgets.DateInput(attrs = {'type': 'date'}),
         'due_back': widgets.DateInput(attrs = {'type': 'date'}),
         'out':  widgets.DateTimeInput(attrs = {'type': 'datetime'}),
         'back': widgets.DateTimeInput(attrs = {'type': 'datetime'}),
     }
Ejemplo n.º 7
0
class EventResponseForm(forms.ModelForm):
    responder_start = forms.DateTimeField(widget=widgets.DateTimeInput(
        format="%m/%d/%Y %H:%M:%S",
        attrs={'placeholder': "MM/DD/YYYY HH:MM:SS"}), )
    responder_end = forms.DateTimeField(widget=widgets.DateTimeInput(
        format="%m/%d/%Y %H:%M:%S",
        attrs={'placeholder': "MM/DD/YYYY HH:MM:SS"}), )

    class Meta:
        model = PollResponse
        fields = ('responder_start', 'responder_end'
                  )  #still have to figure out declining poll
Ejemplo n.º 8
0
 class Meta:
     model = TAXII_Remote_Collection
     fields = ['name', 'begin_timestamp', 'poll_period']
     widgets = {
         'name':
         widgets.TextInput(
             attrs={
                 'id': 'post_collection_name',
                 'class': 'form-control',
                 'placeholder': ''
             }),
         'begin_timestamp':
         widgets.DateTimeInput(
             attrs={
                 'id': 'post_begin_time',
                 'class': 'form-control',
                 'placeholder': ''
             }),
         'poll_period':
         widgets.NumberInput(
             attrs={
                 'id': 'post_poll_period',
                 'class': 'form-control',
                 'placeholder': ''
             }),
     }
Ejemplo n.º 9
0
 class Meta:
     model = Event
     fields = [
         'title', 'photo', 'description', 'start_datetime', 'end_datetime',
         'price', 'location_gmaps_place_id', 'location_friendly_name'
     ]
     widgets = {
         'description':
         forms.Textarea,
         'start_datetime':
         widgets.DateTimeInput(attrs={'class': '_datetimepicker'}),
         'end_datetime':
         widgets.DateTimeInput(attrs={'class': '_datetimepicker'}),
         'location_gmaps_place_id':
         forms.HiddenInput,
     }
Ejemplo n.º 10
0
 class Meta:
     model = Listings
     exclude = ['id', 'agent_id', 'soldondate', 'apartmentid']
     widgets = {
         'price': widgets.NumberInput(attrs={'class': 'form-control'}),
         'description': widgets.TextInput(attrs={'class': 'form-control'}),
         'registered': widgets.DateTimeInput(attrs={'type': 'date'})
     }
Ejemplo n.º 11
0
 class Meta:
     model = models.Iport
     fields = "__all__"
     widgets = {
         "hostname":widgets.TextInput(attrs={"class":"form-control"}),
         "ip":widgets.TextInput(attrs={"class":"form-control"}),
         "port":widgets.NumberInput(attrs={"class":"form-control"}),
         "creat_time":widgets.DateTimeInput(attrs={"class":"form-control"})
     }
Ejemplo n.º 12
0
class InboundEmailForm(ModelForm):
    sent = DateTimeField(input_formats=(DATETIME_FORMAT, ),
                         widget=widgets.DateTimeInput(format=DATETIME_FORMAT))

    class Meta:
        model = InboundEmail
        fields = (
            'recipients',
            'sent',
        )
Ejemplo n.º 13
0
 class Meta:
     model = ToDo
     fields = ('title', 'data', 'dead_line')
     excludes = ("is_done")
     widgets = {
         'dead_line':
         widgets.DateTimeInput(attrs={
             'required': True,
             'placeholder': 'DD/MM/YYYY HH:MM[:SS]'
         })
     }
Ejemplo n.º 14
0
    def __init__(self, *args, **kwargs):
        super(InvoiceForm, self).__init__(*args, **kwargs)
        # Some fields are hidden until the invoice is final
        if not self.instance.finalized:
            for fld in self.hidden_until_finalized:
                del self.fields[fld]

        if not settings.EU_VAT:
            del self.fields['reverse_vat']

        if 'data' in kwargs and 'recipient_user' in kwargs[
                'data'] and kwargs['data']['recipient_user'] != '':
            # Postback with this field, so allow this specifi cuser
            self.fields['recipient_user'].queryset = User.objects.filter(
                pk=kwargs['data']['recipient_user'])
        elif self.instance and self.instance.recipient_user:
            self.fields['recipient_user'].queryset = User.objects.filter(
                pk=self.instance.recipient_user.pk)
        else:
            self.fields['recipient_user'].queryset = User.objects.filter(pk=-1)

        self.fields[
            'recipient_user'].label_from_instance = lambda u: '{0} {1} ({2})'.format(
                u.first_name, u.last_name, u.username)
        self.fields['canceltime'].widget = widgets.DateTimeInput()
        self.fields['allowedmethods'].widget = forms.CheckboxSelectMultiple()
        self.fields[
            'allowedmethods'].queryset = InvoicePaymentMethod.objects.filter()
        self.fields[
            'allowedmethods'].label_from_instance = lambda x: "{0}{1}".format(
                x.internaldescription, x.active and " " or " (INACTIVE)")

        self.fields['accounting_account'].choices = [
            (0, '----'),
        ] + [(a.num, "%s: %s" % (a.num, a.name))
             for a in Account.objects.filter(availableforinvoicing=True)]
        self.fields['accounting_object'].choices = [
            ('', '----'),
        ] + [(o.name, o.name) for o in Object.objects.filter(active=True)]

        if self.instance.finalized:
            # All fields should be read-only for finalized invoices
            for fn, f in list(self.fields.items()):
                if self.instance.ispaid or fn not in self.available_in_finalized:
                    f.required = False
                    if type(f.widget).__name__ in ('TextInput', 'Textarea',
                                                   'DateInput',
                                                   'DateTimeInput'):
                        f.widget.attrs['readonly'] = "readonly"
                    else:
                        f.widget.attrs['disabled'] = True
Ejemplo n.º 15
0
 class Meta:
     model = Proposicao
     fields = [
         'data_envio', 'descricao', 'justificativa_devolucao',
         'gerar_protocolo', 'numero_de_paginas'
     ]
     widgets = {
         'descricao':
         widgets.Textarea(attrs={
             'readonly': 'readonly',
             'rows': 4
         }),
         'data_envio':
         widgets.DateTimeInput(attrs={'readonly': 'readonly'}),
     }
Ejemplo n.º 16
0
class InlineReminderForm(ModelForm):
    scheduled_time = DateTimeField(
        input_formats=(DATETIME_FORMAT, ),
        widget=widgets.DateTimeInput(format=DATETIME_FORMAT))

    def __init__(self, *args, **kwargs):
        """If the reminder has already been sent, disable the scheduled_time
        field"""
        super(InlineReminderForm, self).__init__(*args, **kwargs)
        if self.instance.sent_time is not None:
            self.fields['scheduled_time'].disabled = True
            sent_time = self.instance.sent_time.strftime(DATETIME_FORMAT)
            self.fields['scheduled_time'].help_text = 'Sent %s' % sent_time

    class Meta:
        model = Reminder
        fields = ('scheduled_time', )
Ejemplo n.º 17
0
class emp_form(forms.Form):
    id = fields.IntegerField(
        label='员工ID:',
        widget=widgets.TextInput(attrs={'class': 'form-control'}),
    )
    name = fields.CharField(
        max_length=32,
        widget=widgets.TextInput(attrs={'class': 'form-control'}),
        label='姓名:',
    )
    depart = ModelChoiceField(
        queryset=models.depart.objects.all(),
        widget=widgets.Select(attrs={'class': 'form-control'}),
        label='部门:',
    )
    m_time = fields.DateTimeField(
        label='修改时间:',
        widget=widgets.DateTimeInput(attrs={'class': 'form-control'}),
    )
Ejemplo n.º 18
0
class FoiaForm(ModelForm):
    sent = DateTimeField(input_formats=(DATE_FORMAT, ),
                         widget=widgets.DateTimeInput(format=DATE_FORMAT))
    recipients = RecipientsChoiceField(queryset=Recipient.objects.all())

    def clean_recipients(self):
        return self.cleaned_data['recipients']

    class Meta:
        model = Foia
        fields = (
            'email',
            'request_subject',
            'recipients',
            'sent',
            'notes',
            'project',
            'agency_id',
        )
Ejemplo n.º 19
0
 class Meta:
     model = models.Book  # 指定哪张表
     fields = "__all__"  # 列出所有字段
     # 不用在这里添加,直接在models文件下 加 verbose_name参数就可以改成中文
     # labels = {
     #     "title": "书名",
     #     "price": "价格",
     #     "publisher": "出版社",
     #     "author": "作者",
     #     "date": "日期"
     # }
     from django.forms import widgets as wid  # 因为重名,所以起个别名
     widgets = {
         "date":
         wid.DateTimeInput(attrs={
             "type": "date",
             "class": "form-control"
         }),  # 还可以自定义属性
         "title":
         wid.TextInput(attrs={"class": "form-control"}),  # 还可以自定义属性
         "price":
         wid.TextInput(attrs={"class": "form-control"}),
         "publisher":
         wid.Select(attrs={"class": "form-control"}),
         "author":
         wid.SelectMultiple(attrs={"class": "form-control"})
     }
     error_messages = {
         "date": {
             'required': "年龄不能为空"
         },
         "price": {
             'required': "年龄不能为空"
         },
         "publisher": {
             'required': "年龄不能为空"
         },
         "author": {
             'required': "年龄不能为空"
         }
     }
Ejemplo n.º 20
0
    class Meta:

        model = OpenHouses
        exclude = ['id']

        widgets = {
            'property':
            widgets.Select(attrs={'class': 'form-control'}),
            'user':
            widgets.HiddenInput(attrs={'class': 'form-control'}),
            'length':
            widgets.NumberInput(attrs={
                'class': 'form-control',
                'placeholder': 'Length in minutes'
            }),
            'time':
            widgets.DateTimeInput(attrs={
                'class': 'form-control',
                'placeholder': 'dd/mm/yyyy hh:mm'
            })
        }
Ejemplo n.º 21
0
 class Meta:
     model = User
     fields = [
         'username',
         'Name1',
         'Name2',
         'Name3',
         'LastName1',
         'LastName2',
         'BirthDate',
         'Email',
         'Phone',
         'FKLicenceType',
     ]
     labels = {
         'username':'******',
         'Name1':'Name1',
         'Name2': 'Name2',
         'Name3': 'Name3',
         'LastName1': 'LastName',
         'LastName2': 'LastName2',
         'BirthDate': 'BirthDate',
         'Email': 'Email',
         'Phone': 'Phone',
         'FKLicenceType':'FKLicenceType',
     }
     widgets = {
         'username': widgets.TextInput(attrs={'class': 'form-control'}),
         'Name1': widgets.TextInput(attrs={'class': 'form-control'}),
         'Name2': widgets.TextInput(attrs={'class': 'form-control'}),
         'Name3': widgets.TextInput(attrs={'class': 'form-control'}),
         'LastName1': widgets.TextInput(attrs={'class': 'form-control'}),
         'LastName2': widgets.TextInput(attrs={'class': 'form-control'}),
         'Email': widgets.TextInput(attrs={'class': 'form-control'}),
         'Phone': widgets.TextInput(attrs={'class': 'form-control'}),
         'BirthDate': widgets.DateTimeInput(attrs={'class': 'form-control'}),
         'FKLicenceType ': widgets.Select(attrs={'class': 'form-control'}),
     }
Ejemplo n.º 22
0
class BookFrom(forms.Form):
    title = forms.CharField(
        label='书名',
        max_length=32,
        error_messages={"required": "书名不能为空"},
        widget=widgets.TextInput(attrs={"class": "form-control"}))
    publishDate = forms.DateField(
        label='出版日期',
        help_text="格式如:1990-1-1",
        error_messages={
            "required": "出版日期不能为空",
            "invalid": "日期不合法",
        },
        widget=widgets.DateTimeInput(attrs={"class": "form-control"}))
    price = forms.DecimalField(
        label='价格',
        max_digits=5,
        decimal_places=2,
        error_messages={
            "required": "价格不能为空",
            "invalid": "请输入数字"
        },
        widget=widgets.NumberInput(attrs={"class": "form-control"}))
    publisher = forms.ChoiceField(
        label='出版社', widget=widgets.Select(attrs={"class": "form-control"}))
    authors = forms.MultipleChoiceField(
        label='作者',
        error_messages={"required": "作者不能为空"},
        widget=widgets.SelectMultiple(attrs={"class": "form-control"}))

    def __init__(self, *args, **kwargs):
        super(BookFrom, self).__init__(*args, **kwargs)
        self.fields['publisher'].choices = models.Publisher.objects.all(
        ).order_by('pid').values_list('pid', 'name')
        self.fields['authors'].choices = models.Author.objects.all().order_by(
            'aid').values_list('aid', 'name')
Ejemplo n.º 23
0
class SqlComForm(Form):

    title = fields.CharField(
        max_length=60,
        label='工单标题',
        error_messages={'required': '标题不能为空'},
        widget=widgets.TextInput(
            attrs={
                'class': 'form-control',
                'style': 'min-width:200px; max-width:500px',
                'placeholder': '简述工单功能与作用'
            }))
    # version = fields.ChoiceField(
    #     label='发布版本号',
    #     widget=widgets.Select(choices=[],
    #                           attrs={'class': 'form-control',
    #                                  'style': 'min-width:200px; max-width:500px'})
    # )
    host = fields.CharField(label='数据库地址',
                            widget=widgets.Select(choices=[],
                                                  attrs={
                                                      'class':
                                                      'form-control',
                                                      'id':
                                                      'chose_db_ip',
                                                      'style':
                                                      'min-width:200px;'
                                                      ' max-width:500px'
                                                      ''
                                                  }))
    port = fields.IntegerField(
        widget=widgets.NumberInput(attrs={
            'class': 'form-control',
            'style': 'min-width:200px; max-width:500px'
        }),
        label='端口',
        max_value=65530,
        min_value=1025,
        error_messages={
            'invalid': '请输入有效端口号',
            'min_value': '请输入一个大于或等于1025的端口号',
            'max_value': '请输入一个小于或等于65530的端口号',
            'placeholder': '端口号'
        })
    db_name = fields.CharField(
        label='库名',
        strip=True,
        widget=widgets.TextInput(
            attrs={
                'class': 'form-control',
                'style': 'min-width:200px; max-width:500px',
                'placeholder': '库名'
            }))
    review_name = fields.CharField(label='审核人',
                                   widget=widgets.Select(
                                       choices=[],
                                       attrs={
                                           'class':
                                           'form-control',
                                           'style':
                                           'min-width:200px; max-width:500px'
                                       }))
    run_time = fields.DateTimeField(
        label='工单执行时间',
        required=False,
        widget=widgets.DateTimeInput(
            attrs={
                'class': 'form-control',
                'style': 'min-width:200px; max-width:500px',
                'placeholder': '格式为:2017-06-01 20:00:00 默认为立即执行,当前还未加入定时执行功能'
            }))
    is_commit = fields.ChoiceField(
        label='提交审核',
        initial=0,
        choices=((0, '否'), (1, '是')),
        widget=widgets.Select(attrs={
            'class': 'form-control',
            'style': 'min-width:200px; max-width:500px'
        }),
    )
    sql_content = fields.CharField(
        label='SQL 内容',
        error_messages={'required': 'SQL 内容不能为空'},
        widget=widgets.Textarea(
            attrs={
                'class': 'form-control',
                'style': 'min-width:200px;'
                'max-width:800px;height: 100px'
            }))
    comm = fields.CharField(
        label='工单说明',
        required=False,
        widget=widgets.Textarea(
            attrs={
                'class': 'form-control',
                'style': 'min-width:200px; max-width:500px;height: 35px',
                'placeholder': '审核中有警告时,依然需要提交执行时, 需要在此处写明原因'
            }))

    def __init__(self, *args, **kwargs):
        super(SqlComForm, self).__init__(*args, **kwargs)
        # self.fields['version'].widget.choices = models.HostGroup.objects.values_list('id', 'host_group_jd')
        self.fields[
            'host'].widget.choices = models.HostInfo.objects.values_list(
                'id', 'host_ip')
        user_info = models.UserInfo.objects.filter(
            userrolerelationship__role_id=1).values_list('id', 'user_name')
        self.fields['review_name'].widget.choices = user_info
Ejemplo n.º 24
0
 class Meta:
     model = models.Assets
     fields = '__all__'
     error_message = {
         'hostname': {
             'required': '主机名不能为空',
         },
         'wip': {
             'required': '外网地址不能为空',
             'invalid': 'IP地址格式错误'
         },
         'lip': {
             'required': '内网地址不能为空',
             'invalid': 'IP地址格式错误'
         },
         'system_type': {
             'required': '系统类型不能为空'
         },
         'ssh_port': {
             'required': '端口不能为空',
             'invalid': '格式错误,请输入数字'
         },
     }
     widgets = {
         'hostname':
         widgets.TextInput(attrs={
             'class': 'form-control',
         }),
         'lip':
         widgets.TextInput(attrs={
             'class': 'form-control',
         }),
         'wip':
         widgets.TextInput(attrs={
             'class': 'form-control',
         }),
         'cpu':
         widgets.TextInput(attrs={
             'class': 'form-control',
         }),
         'memory':
         widgets.TextInput(attrs={
             'class': 'form-control',
         }),
         'disk':
         widgets.TextInput(attrs={
             'class': 'form-control',
         }),
         'instance_id':
         widgets.TextInput(attrs={
             'class': 'form-control',
         }),
         'system_type':
         widgets.TextInput(attrs={
             'class': 'form-control',
         }),
         'user':
         widgets.Select(attrs={
             'class': 'form-control',
         }),
         'buy_time':
         widgets.DateTimeInput(
             attrs={
                 'class':
                 'form-control layer-date',
                 'placeholder':
                 "YYYY-MM-DD hh:mm:ss",
                 "onclick":
                 "laydate({istime: true, format: 'YYYY-MM-DD hh:mm:ss'})"
             }),
         'expire_time':
         widgets.DateTimeInput(
             attrs={
                 'class':
                 'form-control layer-date',
                 'placeholder':
                 "YYYY-MM-DD hh:mm:ss",
                 "onclick":
                 "laydate({istime: true, format: 'YYYY-MM-DD hh:mm:ss'})"
             }),
         'online_status':
         widgets.Select(attrs={'class': 'form-control'}),
         'ssh_port':
         widgets.TextInput(attrs={
             'class': 'form-control',
         }),
         'serverid':
         widgets.TextInput(attrs={
             'class': 'form-control',
         }),
         'gameid':
         widgets.TextInput(attrs={'class': 'form-control'}),
         'memo':
         widgets.TextInput(attrs={'class': 'form-control'}),
     }
     help_texts = {
         'hostname': '*  必填项目,名字唯一,主机名这里请不要写IP',
         'user': '******'
     }
Ejemplo n.º 25
0
class EventModelForm(ModelForm):
    update_date = DateTimeField(
        input_formats=(DATE_FORMAT, ),
        widget=widgets.DateTimeInput(format=DATE_FORMAT))
    foia = TypedChoiceField(empty_value=None,
                            initial=None,
                            coerce=lambda pk: Foia.objects.get(pk=pk))
    email = ModelChoiceField(queryset=InboundEmail.objects.all(),
                             required=False,
                             widget=widgets.HiddenInput)

    def __init__(self, *args, **kwargs):
        super(EventModelForm, self).__init__(*args, **kwargs)

        if 'initial' in kwargs and 'email' in kwargs['initial']:
            email = InboundEmail.objects.filter(
                pk=kwargs['initial']['email']).select_related(
                    'sender').first()

            sender_projects = Project.objects.filter(
                collaborators=email.sender).values_list('pk', flat=True)

            prefix_re = re.compile('(re|fwd):', flags=re.IGNORECASE)
            generic_language_re = re.compile(
                r'((?:tpia|record(?:s)*|foia|public\s+information)\s+request)(?!\s+log(?:s)*)',
                flags=re.IGNORECASE | re.VERBOSE)

            def strip_subject(subject):
                prefix_removed = prefix_re.sub('', subject)
                generics_removed = generic_language_re.sub('', prefix_removed)
                return ''.join(_ for _ in generics_removed
                               if _.isalpha() or _ == ' ')

            cleaned_email_subject = strip_subject(email.subject)

            def match_email_to_foia(foia):
                score = fuzz.ratio(
                    strip_subject(foia['request_subject']),
                    cleaned_email_subject,
                )

                # Boost the score if the sender is the same and for requests
                # that are in one of the sender's projects
                if foia['email__sender__pk'] == email.sender.pk:
                    score += 25
                elif foia['project__pk'] is not None and \
                        foia['project__pk'] in sender_projects:
                    score += 20

                days_apart = (email.sent.date() - foia['sent']).days

                # Penalize requests that are older than 30 days, but max out
                # the penalty at the 180-day mark
                min_days = 30
                max_days = 180
                normalized_days_apart = min(max(min_days, days_apart),
                                            max_days) - min_days
                score *= (1 - float(normalized_days_apart) / float(max_days))

                return score

            all_foias = Foia.objects.all().select_related(
                'email', 'email__sender').values(
                    'pk',
                    'sent',
                    'request_subject',
                    'email__sender__pk',
                    'email__sender__last_name',
                    'project__pk',
                )

            for foia in all_foias:
                foia['label'] = '%s: %s' % (
                    foia['email__sender__last_name'],
                    foia['request_subject'],
                )

            ranked_foias = sorted(all_foias,
                                  key=match_email_to_foia,
                                  reverse=True)

            self.fields['foia'].choices = [(
                f['pk'],
                f['label'],
            ) for f in ranked_foias]
        else:
            self.fields['foia'].choices = Foia.objects.all().select_related(
                'email__sender').values_list('pk', 'request_subject')

    class Meta:
        model = Event
        fields = (
            'foia',
            'status',
            'update_date',
            'amount_asked',
            'amount_paid',
            'notes',
            'email',
        )
        widgets = {'status': RadioSelect(choices=Event.STATUS_CHOICES)}
Ejemplo n.º 26
0
class DataReportFilter(rest_framework_filters.FilterSet):
    consumer_id = rest_framework_filters.ModelChoiceFilter(
        queryset=consumer_models.Consumer.objects.all(),
        label='Consumer',
    )

    feeder_id = rest_framework_filters.ModelChoiceFilter(
     queryset=feeder_models.Feeder.objects\
      .select_related()\
      .all(),
     label='Feeder',
    )

    channel_id = rest_framework_filters.ModelChoiceFilter(
     queryset=channel_models.Channel.objects\
      .select_related()\
      .all(),
     label='Channel',
    )

    channel_type = rest_framework_filters.ChoiceFilter(
        choices=channel_models.Channel.choices, )

    req = rest_framework_filters.ChoiceFilter(
        choices=REQ_CHOISES,
        field_name=None,
        label='req',
    )

    interval = rest_framework_filters.ChoiceFilter(
        choices=INTERVAL_CHOISES,
        field_name=None,
        label='interval',
    )

    tariff = rest_framework_filters.ChoiceFilter(
        choices=TARIFF_CHOISES,
        field_name=None,
        label='tariff',
    )

    t1 = rest_framework_filters.DateTimeFromToRangeFilter(
        label='t1',
        widget=widgets.DateTimeInput(attrs={
            'placeholder': 'YYYYMMDDHHMMSS',
        }))

    t2 = rest_framework_filters.DateTimeFromToRangeFilter(
        label='t2',
        widget=widgets.DateTimeInput(attrs={
            'placeholder': 'YYYYMMDDHHMMSS',
        }))

    class Meta:
        model = channel_models.Channel
        fields = [
            'consumer_id',
            'feeder_id',
            'channel_id',
            'channel_type',
            'req',
            'interval',
            'tariff',
            't1',
            't2',
        ]