Ejemplo n.º 1
0
 class Meta:
     model = Asset
     fields = (
         'id',
         'delete',
         'model_proposed',
         'model_user',
         'invoice_no',
         'order_no',
         'sn',
         'barcode',
         'price',
         'support_price',
         'support_period',
         'support_type',
         'support_void_reporting',
         'provider',
         'source',
         'status',
         'request_date',
         'delivery_date',
         'invoice_date',
         'production_use_date',
         'provider_order_date',
         'warehouse',
     )
     widgets = {
         'request_date': DateWidget(),
         'delivery_date': DateWidget(),
         'invoice_date': DateWidget(),
         'production_use_date': DateWidget(),
         'provider_order_date': DateWidget(),
         'device_info': HiddenInput(),
     }
Ejemplo n.º 2
0
 class Meta:
     model = UsagePrice
     fields = 'price', 'start', 'end'
     widgets = {
         'start': DateWidget(attrs={'class': 'input-small'}),
         'end': DateWidget(attrs={'class': 'input-small'}),
     }
Ejemplo n.º 3
0
 class Meta:
     model = ExtraCost
     fields = 'type', 'price', 'start', 'end'
     widgets = {
         'start': DateWidget(attrs={'class': 'input-small'}),
         'end': DateWidget(attrs={'class': 'input-small'}),
     }
Ejemplo n.º 4
0
    class Meta:
        model = ExtraCost
        fields = 'service_environment', 'cost', 'start', 'end'

        widgets = {
            'start': DateWidget(attrs={'class': 'input-small'}),
            'end': DateWidget(attrs={'class': 'input-small'}),
        }
Ejemplo n.º 5
0
class WarrantyRangeReportForm(forms.Form):
    w_start = forms.DateField(
        widget=DateWidget(attrs={'class': 'input-small'}, ),
        label='Start date',
    )
    w_end = forms.DateField(
        widget=DateWidget(attrs={'class': 'input-small'}, ),
        label='End date',
    )
Ejemplo n.º 6
0
class DeprecationRangeReportForm(forms.Form):
    d_start = forms.DateField(
        widget=DateWidget(attrs={'class': 'input-small'}, ),
        label='Start date',
    )
    d_end = forms.DateField(
        widget=DateWidget(attrs={'class': 'input-small'}, ),
        label='End date',
    )
Ejemplo n.º 7
0
    class Meta:
        model = ExtraCost
        fields = 'mode', 'pricing_venture', 'monthly_cost', 'start', 'end'

        widgets = {
            'start': DateWidget(attrs={'class': 'input-small'}),
            'end': DateWidget(attrs={'class': 'input-small'}),
            'mode': forms.Select(attrs={'class': 'mode_selector'}),
        }
Ejemplo n.º 8
0
    class Meta:
        model = TeamDaterange

        fields = ['start', 'end']

        widgets = {
            'start': DateWidget(attrs={'class': 'input-small'}),
            'end': DateWidget(attrs={'class': 'input-small'}),
        }
Ejemplo n.º 9
0
class SupportRangeReportForm(forms.Form):
    s_start = forms.DateField(
        widget=DateWidget(attrs={'class': 'input-small'}, ),
        label='Start date',
    )
    s_end = forms.DateField(
        widget=DateWidget(attrs={'class': 'input-small'}, ),
        label='End date',
    )
Ejemplo n.º 10
0
class DateRangeForm(forms.Form):
    '''Form schema. Used to generate venture raports'''
    start = forms.DateField(
        widget=DateWidget(attrs={'class': 'input-small'}, ),
        label='',
        initial=lambda: datetime.date.today() - datetime.timedelta(days=30),
    )
    end = forms.DateField(
        widget=DateWidget(attrs={'class': 'input-small'}, ),
        label='',
        initial=datetime.date.today,
    )
Ejemplo n.º 11
0
class DateRangeForm(forms.Form):
    start = forms.DateField(
        widget=DateWidget(attrs={'class': 'input-small'}, ),
        label='',
        initial=lambda: datetime.date.today() - datetime.timedelta(days=30),
    )
    end = forms.DateField(
        widget=DateWidget(attrs={'class': 'input-small'}, ),
        label='',
        initial=datetime.date.today,
    )
    show_in_ralph = forms.BooleanField(
        required=False,
        label=_("Show only active"),
    )
Ejemplo n.º 12
0
    class Meta:
        model = UsagePrice

        fields = [
            'warehouse',
            'forecast_price',
            'price',
            'forecast_cost',
            'cost',
            'start',
            'end',
        ]

        widgets = {
            'start': DateWidget(attrs={'class': 'input-small'}),
            'end': DateWidget(attrs={'class': 'input-small'}),
        }
Ejemplo n.º 13
0
 class Meta:
     model = Asset
     fields = (
         'niw',
         'sn',
         'type',
         'category',
         'model',
         'status',
         'warehouse',
         'source',
         'invoice_no',
         'order_no',
         'price',
         'support_price',
         'support_type',
         'support_period',
         'support_void_reporting',
         'provider',
         'remarks',
         'sn',
         'barcode',
         'request_date',
         'provider_order_date',
         'delivery_date',
         'invoice_date',
         'production_use_date',
         'deleted',
         'deprecation_rate',
         'slots',
     )
     widgets = {
         'request_date': DateWidget(),
         'delivery_date': DateWidget(),
         'invoice_date': DateWidget(),
         'production_use_date': DateWidget(),
         'provider_order_date': DateWidget(),
         'remarks': Textarea(attrs={'rows': 3}),
         'support_type': Textarea(attrs={'rows': 5}),
         'sn': Textarea(attrs={
             'rows': 1,
             'readonly': '1'
         }),
         'barcode': Textarea(attrs={'rows': 1}),
     }
Ejemplo n.º 14
0
class ReportFiltersDateRange(forms.Form):
    date_attrs = {
        'data-collapsed': True,
        'class': 'input-small',
    }
    start_update = forms.DateField(
        required=False,
        widget=DateWidget(dict(
            date_attrs,
            placeholder='From',
        )),
        label="Update"
    )
    end_update = forms.DateField(
        required=False,
        widget=DateWidget(
            attrs={
                'placeholder': 'End',
                'data-collapsed': True,
                'class': 'input-small',
            }
        ),
        label="",
    )
    start_resolved = forms.DateField(
        required=False,
        widget=DateWidget(dict(date_attrs, placeholder='From')),
        label="Resolved",
    )
    end_resolved = forms.DateField(
        required=False,
        widget=DateWidget(dict(date_attrs, placeholder='To')),
        label="",
    )
    start_planned_start = forms.DateField(
        required=False,
        widget=DateWidget(dict(date_attrs, placeholder='From')),
        label="Planed start",
    )
    end_planned_start = forms.DateField(
        required=False,
        widget=DateWidget(dict(date_attrs, placeholder='To')),
        label="",
    )
    start_planned_end = forms.DateField(
        required=False,
        widget=DateWidget(dict(date_attrs, placeholder='From')),
        label="Planed end",
    )
    end_planned_end = forms.DateField(
        required=False,
        widget=DateWidget(dict(date_attrs, placeholder='To')),
        label="",
    )
Ejemplo n.º 15
0
    class Meta:
        model = UsagePrice

        fields = [
            'warehouse',
            'team',
            'team_members_count',
            'internet_provider',
            'forecast_price',
            'price',
            'forecast_cost',
            'cost',
            'start',
            'end',
        ]

        widgets = {
            'start': DateWidget(attrs={'class': 'input-small'}),
            'end': DateWidget(attrs={'class': 'input-small'}),
        }
Ejemplo n.º 16
0
class TransitionForm(forms.Form):
    user = AutoCompleteSelectField(
        LOOKUPS['asset_user'],
        required=True,
    )
    warehouse = AutoCompleteSelectField(
        LOOKUPS['asset_warehouse'],
        required=True,
    )
    loan_end_date = forms.DateField(
        required=True, widget=DateWidget(attrs={
            'class': 'end-date-field ',
            'placeholder': _('End YYYY-MM-DD'),
            'data-collapsed': True,
        }),
        label=_('Loan end date'),
        input_formats=RALPH_DATE_FORMAT_LIST,
    )
    country = forms.ChoiceField(
        choices=[('', '----')] + Country(),
        label=_('Country'),
        required=True,
    )
Ejemplo n.º 17
0
 class Meta:
     model = OfficeInfo
     exclude = ('created', 'modified')
     widgets = {
         'date_of_last_inventory': DateWidget(),
     }
Ejemplo n.º 18
0
class SearchAssetForm(Form):
    """returns search asset form for DC and BO.

    :param mode: one of `dc` for DataCenter or `bo` for Back Office
    :returns Form
    """
    model = AutoCompleteField(
        LOOKUPS['asset_model'],
        required=False,
        help_text=None,
    )
    manufacturer = AutoCompleteField(
        LOOKUPS['asset_manufacturer'],
        required=False,
        help_text=None,
    )
    invoice_no = CharField(required=False)
    order_no = CharField(required=False)
    provider = CharField(required=False, label='Provider')
    status = ChoiceField(required=False,
                         choices=[('', '----')] + AssetStatus(),
                         label='Status')
    part_info = ChoiceField(required=False,
                            choices=[('', '----'), ('device', 'Device'),
                                     ('part', 'Part')],
                            label='Asset type')
    category = TreeNodeChoiceField(
        required=False,
        queryset=AssetCategory.tree.all(),
        level_indicator='|---',
        empty_label="---",
    )
    source = ChoiceField(
        required=False,
        choices=[('', '----')] + AssetSource(),
    )
    niw = CharField(required=False, label='Niw')
    sn = CharField(required=False, label='SN')
    barcode = CharField(required=False, label='Barcode')
    ralph_device_id = IntegerField(
        required=False,
        label='Ralph device id',
    )
    request_date_from = DateField(
        required=False,
        widget=DateWidget(attrs={
            'placeholder': 'Start YYYY-MM-DD',
            'data-collapsed': True,
        }),
        label="Request date",
    )
    request_date_to = DateField(required=False,
                                widget=DateWidget(
                                    attrs={
                                        'class': 'end-date-field ',
                                        'placeholder': 'End YYYY-MM-DD',
                                        'data-collapsed': True,
                                    }),
                                label='')
    provider_order_date_from = DateField(
        required=False,
        widget=DateWidget(attrs={
            'placeholder': 'Start YYYY-MM-DD',
            'data-collapsed': True,
        }),
        label="Provider order date",
    )
    provider_order_date_to = DateField(required=False,
                                       widget=DateWidget(
                                           attrs={
                                               'class': 'end-date-field ',
                                               'placeholder': 'End YYYY-MM-DD',
                                               'data-collapsed': True,
                                           }),
                                       label='')
    delivery_date_from = DateField(
        required=False,
        widget=DateWidget(attrs={
            'placeholder': 'Start YYYY-MM-DD',
            'data-collapsed': True,
        }),
        label="Delivery date",
    )
    delivery_date_to = DateField(required=False,
                                 widget=DateWidget(
                                     attrs={
                                         'class': 'end-date-field ',
                                         'placeholder': 'End YYYY-MM-DD',
                                         'data-collapsed': True,
                                     }),
                                 label='')
    deprecation_rate = ChoiceField(required=False,
                                   choices=[
                                       ('', '----'),
                                       ('null', 'None'),
                                       ('48>', '48 <'),
                                       ('48', '24 < * <= 48'),
                                       ('24', '12 < * <= 24'),
                                       ('12', '6 < * <= 12'),
                                       ('6', '* <= 6'),
                                       ('deprecated', 'Deprecated'),
                                   ],
                                   label='Deprecation')
    invoice_date_from = DateField(
        required=False,
        widget=DateWidget(attrs={
            'placeholder': 'Start YYYY-MM-DD',
            'data-collapsed': True,
        }),
        label="Invoice date",
    )
    invoice_date_to = DateField(required=False,
                                widget=DateWidget(
                                    attrs={
                                        'class': 'end-date-field ',
                                        'placeholder': 'End YYYY-MM-DD',
                                        'data-collapsed': True,
                                    }),
                                label='')

    production_use_date_from = DateField(
        required=False,
        widget=DateWidget(attrs={
            'placeholder': 'Start YYYY-MM-DD',
            'data-collapsed': True,
        }),
        label="Production use date",
    )
    production_use_date_to = DateField(required=False,
                                       widget=DateWidget(
                                           attrs={
                                               'class': 'end-date-field ',
                                               'placeholder': 'End YYYY-MM-DD',
                                               'data-collapsed': True,
                                           }),
                                       label='')
    unlinked = BooleanField(required=False, label="Is unlinked")
    deleted = BooleanField(required=False, label="Include deleted")

    def __init__(self, *args, **kwargs):
        # Ajax sources are different for DC/BO, use mode for distinguish
        mode = kwargs.get('mode')
        if mode:
            del kwargs['mode']
        super(SearchAssetForm, self).__init__(*args, **kwargs)
        category = self.fields['category'].queryset
        if mode == 'dc':
            self.fields['category'].queryset = category.filter(
                type=AssetCategoryType.data_center)
        elif mode == 'back_office':
            self.fields['category'].queryset = category.filter(
                type=AssetCategoryType.back_office)
Ejemplo n.º 19
0
class SearchForm(forms.Form):
    name = forms.CharField(required=False,
                           widget=forms.TextInput(attrs={'class': 'span12'}))
    address = forms.CharField(
        required=False,
        widget=forms.TextInput(attrs={
            'class': 'span12',
            'title': TooltipContent.empty_field,
        }),
        label="Address or network")
    remarks = forms.CharField(
        required=False,
        widget=forms.TextInput(attrs={
            'class': 'span12',
            'title': TooltipContent.empty_field
        }))
    role = forms.CharField(
        required=False,
        widget=forms.TextInput(attrs={
            'class': 'span12',
            'title': TooltipContent.empty_field,
        }),
        label="Venture or role")
    model = forms.CharField(
        required=False,
        widget=forms.TextInput(attrs={
            'class': 'span12',
            'title': TooltipContent.empty_field_venture,
        }))
    component = forms.CharField(
        required=False,
        widget=forms.TextInput(attrs={'class': 'span12'}),
        label="Component or software")
    serial = forms.CharField(
        required=False,
        widget=forms.TextInput(attrs={
            'class': 'span12',
            'title': TooltipContent.empty_field,
        }),
        label="Serial number, MAC or WWN")
    barcode = forms.CharField(
        required=False,
        widget=forms.TextInput(attrs={
            'class': 'span12',
            'title': TooltipContent.empty_field,
        }))
    position = forms.CharField(
        required=False,
        widget=forms.TextInput(attrs={
            'class': 'span12',
            'title': TooltipContent.empty_field,
        }),
        label="Datacenter, rack or position")
    history = forms.CharField(
        required=False, widget=forms.TextInput(attrs={'class': 'span12'}))
    device_type = forms.MultipleChoiceField(
        required=False,
        widget=forms.SelectMultiple(attrs={'class': 'span12'}),
        choices=DeviceType(item=lambda e: (e.id, e.raw)),
    )
    device_group = forms.IntegerField(required=False,
                                      widget=DeviceGroupWidget,
                                      label="")
    component_group = forms.IntegerField(required=False,
                                         widget=ComponentGroupWidget,
                                         label="")
    purchase_date_start = forms.DateField(
        required=False,
        widget=DateWidget(
            attrs={
                'class': 'span12',
                'placeholder': 'Start YYYY-MM-DD',
                'data-collapsed': True,
            }),
        label='Purchase date',
        input_formats=['%Y-%m-%d'])
    purchase_date_end = forms.DateField(
        required=False,
        widget=DateWidget(
            attrs={
                'class': 'span12 end-date-field',
                'placeholder': 'End YYYY-MM-DD',
                'data-collapsed': True,
            }),
        label='',
        input_formats=['%Y-%m-%d'])
    no_purchase_date = forms.BooleanField(
        required=False,
        label="Empty purchase date",
        widget=forms.CheckboxInput(attrs={
            'data-collapsed': True,
        }))
    deprecation_date_start = forms.DateField(
        required=False,
        widget=DateWidget(
            attrs={
                'class': 'span12',
                'placeholder': 'Start YYYY-MM-DD',
                'data-collapsed': True,
            }),
        label='Deprecation date',
        input_formats=['%Y-%m-%d'])
    deprecation_date_end = forms.DateField(
        required=False,
        widget=DateWidget(
            attrs={
                'class': 'span12 end-date-field',
                'placeholder': 'End YYYY-MM-DD',
                'data-collapsed': True,
            }),
        label='',
        input_formats=['%Y-%m-%d'])
    no_deprecation_date = forms.BooleanField(
        required=False,
        label="Empty deprecation date",
        widget=forms.CheckboxInput(attrs={
            'data-collapsed': True,
        }))
    warranty_expiration_date_start = forms.DateField(
        required=False,
        widget=DateWidget(
            attrs={
                'class': 'span12',
                'placeholder': 'Start YYYY-MM-DD',
                'data-collapsed': True,
            }),
        label='Warranty expiration date',
        input_formats=['%Y-%m-%d'])
    warranty_expiration_date_end = forms.DateField(
        required=False,
        widget=DateWidget(
            attrs={
                'class': 'span12 end-date-field',
                'placeholder': 'End YYYY-MM-DD',
                'data-collapsed': True,
            }),
        label='',
        input_formats=['%Y-%m-%d'])
    no_warranty_expiration_date = forms.BooleanField(
        required=False,
        label="Empty warranty expiration date",
        widget=forms.CheckboxInput(attrs={
            'data-collapsed': True,
        }))
    support_expiration_date_start = forms.DateField(
        required=False,
        widget=DateWidget(
            attrs={
                'class': 'span12',
                'placeholder': 'Start YYYY-MM-DD',
                'data-collapsed': True,
            }),
        label='Support expiration date',
        input_formats=['%Y-%m-%d'])
    support_expiration_date_end = forms.DateField(
        required=False,
        widget=DateWidget(
            attrs={
                'class': 'span12 end-date-field ',
                'placeholder': 'End YYYY-MM-DD',
                'data-collapsed': True,
            }),
        label='',
        input_formats=['%Y-%m-%d'])
    no_support_expiration_date = forms.BooleanField(
        required=False,
        label="Empty support expiration date",
        widget=forms.CheckboxInput(attrs={
            'data-collapsed': True,
        }))
    deleted = forms.BooleanField(required=False, label="Include deleted")

    def clean_purchase_date_end(self):
        validate_start_end_date_date(self.cleaned_data['purchase_date_start'],
                                     self.cleaned_data['purchase_date_end'])
        return self.cleaned_data['purchase_date_end']

    def clean_deprecation_date_end(self):
        validate_start_end_date_date(
            self.cleaned_data['deprecation_date_start'],
            self.cleaned_data['deprecation_date_end'])
        return self.cleaned_data['deprecation_date_end']

    def clean_warranty_expiration_date_end(self):
        validate_start_end_date_date(
            self.cleaned_data['warranty_expiration_date_start'],
            self.cleaned_data['warranty_expiration_date_end'])
        return self.cleaned_data['warranty_expiration_date_end']

    def clean_support_expiration_date_end(self):
        validate_start_end_date_date(
            self.cleaned_data['support_expiration_date_start'],
            self.cleaned_data['support_expiration_date_end'])
        return self.cleaned_data['support_expiration_date_end']

    def clean_address(self):
        data = self.cleaned_data['address']
        if data:
            if '/' in data:
                try:
                    ipaddr.IPNetwork(data)
                except ValueError:
                    raise forms.ValidationError("Invalid network")
            else:
                try:
                    ipaddr.IPv4Address(data)
                except ValueError:
                    raise forms.ValidationError("Invalid address")
        return data
Ejemplo n.º 20
0
class SearchForm(forms.Form):
    name = forms.CharField(required=False,
                           widget=forms.TextInput(attrs={'class': 'span12'}))
    address = forms.CharField(required=False,
                              widget=forms.TextInput(attrs={
                                  'class': 'span12',
                                  'title': TooltipContent.empty_field,
                              }),
                              label="Address or network")
    remarks = forms.CharField(required=False,
                              widget=forms.TextInput(attrs={
                                  'class': 'span12',
                                  'title': TooltipContent.empty_field
                              }))
    role = forms.CharField(required=False,
                           widget=forms.TextInput(attrs={
                               'class': 'span12',
                               'title': TooltipContent.empty_field,
                           }),
                           label="Venture or role")
    # This search field cannot be named 'service', because 'Info' tab already
    # has ajax field with the same id, and such collision results in unwanted
    # data bindings between those two.
    service_catalog = forms.CharField(required=False,
                                      widget=forms.TextInput(attrs={
                                          'class': 'span12',
                                          'title': TooltipContent.empty_field,
                                      }),
                                      label="Service catalog")
    device_environment = forms.CharField(required=False,
                                         widget=forms.TextInput(attrs={
                                             'class': 'span12',
                                             'title': TooltipContent.empty_field,
                                         }),
                                         label="Device environment")
    model = forms.CharField(required=False,
                            widget=forms.TextInput(attrs={
                                'class': 'span12',
                                'title': TooltipContent.empty_field_venture,
                            }))
    component = forms.CharField(required=False,
                                widget=forms.TextInput(
                                    attrs={'class': 'span12'}),
                                label="Component")
    software = forms.CharField(required=False,
                               widget=forms.TextInput(attrs={
                                   'class': 'span12',
                                   'title': TooltipContent.software_field,
                               }),
                               label="Software")
    serial = forms.CharField(required=False,
                             widget=forms.TextInput(attrs={
                                 'class': 'span12',
                                 'title': TooltipContent.empty_field,
                             }),
                             label="Serial number, MAC or WWN")
    barcode = forms.CharField(required=False,
                              widget=forms.TextInput(attrs={
                                  'class': 'span12',
                                  'title': TooltipContent.empty_field,
                              }))
    department = forms.CharField(
        required=False, widget=forms.TextInput(attrs={
            'class': 'span12',
        }))
    position = forms.CharField(required=False,
                               widget=forms.TextInput(attrs={
                                   'class': 'span12',
                                   'title': TooltipContent.empty_field,
                               }),
                               label="Datacenter, rack or position")
    history = forms.CharField(required=False,
                              widget=forms.TextInput(attrs={
                                  'class': 'span12'
                              }))
    device_type = forms.MultipleChoiceField(required=False,
                                            widget=forms.SelectMultiple(
                                                attrs={'class': 'span12'}),
                                            choices=DeviceType(
                                                item=lambda e: (e.id, e.raw)),
                                            )
    purchase_date_start = forms.DateField(required=False,
                                          widget=DateWidget(attrs={
                                              'class': 'span12',
                                              'placeholder': 'Start YYYY-MM-DD',
                                              'data-collapsed': True,
                                          }),
                                          label='Purchase date', input_formats=['%Y-%m-%d'])
    purchase_date_end = forms.DateField(required=False,
                                        widget=DateWidget(attrs={
                                            'class': 'span12 end-date-field',
                                            'placeholder': 'End YYYY-MM-DD',
                                            'data-collapsed': True,
                                        }),
                                        label='', input_formats=['%Y-%m-%d'])
    no_purchase_date = forms.BooleanField(required=False,
                                          label="Empty purchase date",
                                          widget=forms.CheckboxInput(attrs={
                                              'data-collapsed': True,
                                          }))
    deprecation_date_start = forms.DateField(required=False,
                                             widget=DateWidget(attrs={
                                                 'class': 'span12',
                                                 'placeholder': 'Start YYYY-MM-DD',
                                                 'data-collapsed': True,
                                             }),
                                             label='Deprecation date', input_formats=['%Y-%m-%d'])
    deprecation_date_end = forms.DateField(required=False,
                                           widget=DateWidget(attrs={
                                               'class': 'span12 end-date-field',
                                               'placeholder': 'End YYYY-MM-DD',
                                               'data-collapsed': True,
                                           }),
                                           label='', input_formats=['%Y-%m-%d'])
    no_deprecation_date = forms.BooleanField(required=False,
                                             label="Empty deprecation date",
                                             widget=forms.CheckboxInput(attrs={
                                                 'data-collapsed': True,
                                             }))
    deprecation_kind = forms.MultipleChoiceField(
        required=False,
        widget=forms.SelectMultiple(
            attrs={'class': 'span12',
                   'data-collapsed': True},),
        label="Deprecation",
        choices=[('None', '-----')] + [(kind.id, kind.name)
                                       for kind in DeprecationKind.objects.all()],
    )
    warranty_expiration_date_start = forms.DateField(required=False,
                                                     widget=DateWidget(attrs={
                                                         'class': 'span12',
                                                         'placeholder': 'Start YYYY-MM-DD',
                                                         'data-collapsed': True,
                                                     }),
                                                     label='Warranty expiration date', input_formats=['%Y-%m-%d'])
    warranty_expiration_date_end = forms.DateField(required=False,
                                                   widget=DateWidget(attrs={
                                                       'class': 'span12 end-date-field',
                                                       'placeholder': 'End YYYY-MM-DD',
                                                       'data-collapsed': True,
                                                   }),
                                                   label='', input_formats=['%Y-%m-%d'])
    no_warranty_expiration_date = forms.BooleanField(required=False,
                                                     label="Empty warranty expiration date",
                                                     widget=forms.CheckboxInput(attrs={
                                                         'data-collapsed': True,
                                                     }))
    support_expiration_date_start = forms.DateField(required=False,
                                                    widget=DateWidget(attrs={
                                                        'class': 'span12',
                                                        'placeholder': 'Start YYYY-MM-DD',
                                                        'data-collapsed': True,
                                                    }),
                                                    label='Support expiration date', input_formats=['%Y-%m-%d'])
    support_expiration_date_end = forms.DateField(required=False,
                                                  widget=DateWidget(attrs={
                                                      'class': 'span12 end-date-field ',
                                                      'placeholder': 'End YYYY-MM-DD',
                                                      'data-collapsed': True,
                                                  }),
                                                  label='', input_formats=['%Y-%m-%d'])
    no_support_expiration_date = forms.BooleanField(required=False,
                                                    label="Empty support expiration date",
                                                    widget=forms.CheckboxInput(attrs={
                                                        'data-collapsed': True,
                                                    }))
    with_changes = forms.BooleanField(
        required=False,
        label="Only with Scan changes",
    )
    deleted = forms.BooleanField(required=False, label="Include deleted")

    def clean_purchase_date_end(self):
        validate_start_end_date_date(self.cleaned_data['purchase_date_start'],
                                     self.cleaned_data['purchase_date_end'])
        return self.cleaned_data['purchase_date_end']

    def clean_deprecation_date_end(self):
        validate_start_end_date_date(
            self.cleaned_data['deprecation_date_start'],
            self.cleaned_data['deprecation_date_end'])
        return self.cleaned_data['deprecation_date_end']

    def clean_warranty_expiration_date_end(self):
        validate_start_end_date_date(
            self.cleaned_data['warranty_expiration_date_start'],
            self.cleaned_data['warranty_expiration_date_end'])
        return self.cleaned_data['warranty_expiration_date_end']

    def clean_support_expiration_date_end(self):
        validate_start_end_date_date(
            self.cleaned_data['support_expiration_date_start'],
            self.cleaned_data['support_expiration_date_end'])
        return self.cleaned_data['support_expiration_date_end']

    def clean_address(self):
        data = self.cleaned_data['address']
        if data:
            if '/' in data:
                try:
                    ipaddr.IPNetwork(data)
                except ValueError:
                    raise forms.ValidationError("Invalid network")
            else:
                try:
                    ipaddr.IPv4Address(data)
                except ValueError:
                    raise forms.ValidationError("Invalid address")
        return data