Ejemplo n.º 1
0
 class Meta:
     fields = "__all__"
     model = models.Asset
     widgets = {
         'credit_account': Select2Widget(attrs={'data-width': '20rem'})
     }
Ejemplo n.º 2
0
 def test_empty_css_setting(self, settings):
     settings.SELECT2_CSS = ''
     sut = Select2Widget()
     result = sut.media.render()
     assert '.css' not in result
Ejemplo n.º 3
0
 def test_custom_tag_attrs_Select2Widget(self):
     widget = Select2Widget(attrs={'data-minimum-input-length': '3'})
     output = widget.render('name', 'value')
     assert 'data-minimum-input-length="3"' in output
Ejemplo n.º 4
0
 def test_default_media(self):
     sut = Select2Widget()
     result = sut.media.render()
     assert '//cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js' in result
     assert '//cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css' in result
     assert 'django_select2/django_select2.js' in result
Ejemplo n.º 5
0
 def test_empty_js_setting(self, settings):
     settings.SELECT2_JS = ''
     sut = Select2Widget()
     result = sut.media.render()
     assert 'django_select2/django_select2.js' in result
Ejemplo n.º 6
0
 def test_multiple_css_setting(self, settings):
     settings.SELECT2_CSS = ["select2.css", "select2-theme.css"]
     sut = Select2Widget()
     result = sut.media.render()
     assert "select2.css" in result
     assert "select2-theme.css" in result
Ejemplo n.º 7
0
 class Meta:
     model = Entrada
     fields = ('empleado', 'paciente', 'descripcion', 'area')
     labels = {'area': "Área"}
     widgets = {'area': Select2Widget()}
Ejemplo n.º 8
0
class AxisOptionsInlineForm(OptionsInlineFormBase):
    label = forms.CharField(
        required=True,
        widget=Select2Widget(choices=get_chartjs_axis_options()))
Ejemplo n.º 9
0
class WorkshopForm(ModelForm):
    class CategoryChoiceField(ModelMultipleChoiceField):
        def label_from_instance(self, obj):
            return obj.name

    class TypeChoiceField(ModelChoiceField):
        def label_from_instance(self, obj):
            return obj.name

    # Note that the querysets for category and type are overwritten in __init__, but the argument is required here
    category = CategoryChoiceField(
        label="Kategorie",
        queryset=WorkshopCategory.objects.all(),
        widget=Select2MultipleWidget(attrs={'width': '200px'}))
    type = TypeChoiceField(label="Rodzaj zajęć",
                           queryset=WorkshopType.objects.all(),
                           widget=Select2Widget(attrs={'width': '200px'}))

    qualification_problems = FileField(
        required=False,
        widget=FileInput(),
        label='Zadania kwalifikacyjne (wymagany format PDF):',
        validators=[FileExtensionValidator(allowed_extensions=['pdf'])])

    class Meta:
        model = Workshop
        fields = [
            'title', 'name', 'type', 'category', 'proposition_description',
            'qualification_problems', 'is_qualifying',
            'solution_uploads_enabled', 'max_points',
            'qualification_threshold', 'short_description', 'page_content',
            'page_content_is_public'
        ]
        labels = {
            'title':
            'Tytuł',
            'name':
            'Nazwa (w URLach)',
            'proposition_description':
            'Opis propozycji warsztatów',
            'is_qualifying':
            'Czy warsztaty są kwalifikujące',
            'solution_uploads_enabled':
            'Czy przesyłanie rozwiązań przez stronę jest włączone',
            'max_points':
            'Maksymalna liczba punktów możliwa do uzyskania',
            'qualification_threshold':
            'Minimalna liczba punktów potrzebna do kwalifikacji',
            'short_description':
            'Krótki opis warsztatów',
            'page_content':
            'Strona warsztatów',
            'page_content_is_public':
            'Zaznacz, jeśli opis jest gotowy i może już być publiczny.'
        }
        help_texts = {
            'short_description':
            'Zachęć uczestnika do zainteresowania się Twoimi warsztatami w max 140 znakach. Wyświetlany na stronie z programem.',
            'is_qualifying':
            '(odznacz, jeśli nie zamierzasz dodawać zadań i robić kwalifikacji)',
            'solution_uploads_enabled':
            'Od edycji 2021 uczestnicy przesyłają rozwiązania zadań kwalifikacyjnych przez stronę zamiast maila. Jeśli z jakiegoś powodu bardzo chcesz wyłączyć tą funkcję, skontaktuj się z organizatorami.',
            'qualification_threshold':
            '(wpisz dopiero po sprawdzeniu zadań)',
            'max_points':
            '(możesz postawić punkty bonusowe powyżej tej wartości, ale tylko do max. {}%)'
            .format(settings.MAX_POINTS_PERCENT)
        }

    def __init__(self,
                 *args,
                 workshop_url,
                 has_perm_to_edit=True,
                 has_perm_to_disable_uploads=False,
                 profile_warnings=None,
                 **kwargs):
        super(ModelForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper(self)
        self.helper.include_media = False

        # Disable fields that should be disabled
        if not self.instance.is_workshop_editable() or not has_perm_to_edit:
            for field in self.fields.values():
                field.disabled = True

        if self.instance.status:
            # The proposition cannot be edited once the workshop has a status set
            self.fields['proposition_description'].disabled = True

        if not has_perm_to_disable_uploads:
            self.fields['solution_uploads_enabled'].disabled = True

        # Make sure only current category and type choices are displayed
        if self.instance is None:
            raise ValueError(
                'WorkshopForm must be provided with an instance with the .year field already set'
            )
        year = self.instance.year
        self.fields['category'].queryset = WorkshopCategory.objects.filter(
            year=year)
        self.fields['type'].queryset = WorkshopType.objects.filter(year=year)

        # Display link to current qualification tasks:
        if self.instance.qualification_problems:
            self.fields['qualification_problems'].help_text = format_html(
                'Aktualnie: <a href="{}" target="_blank">{}</a>',
                reverse('qualification_problems',
                        args=[self.instance.year.pk, self.instance.name]),
                os.path.basename(self.instance.qualification_problems.path))
        else:
            self.fields['qualification_problems'].help_text = 'Aktualnie: brak'

        # Configure TinyMCE settings
        mce_attrs = {}
        mce_attrs['readonly'] = self.fields[
            'proposition_description'].disabled  # does not seem to respect the Django field settings for some reason
        self.fields['proposition_description'].widget = InitializedTinyMCE(
            mce_attrs=mce_attrs)

        mce_attrs = settings.TINYMCE_DEFAULT_CONFIG_WITH_IMAGES.copy()
        if self.instance and self.instance.pk:
            mce_attrs['automatic_uploads'] = True
            mce_attrs['images_upload_url'] = reverse('workshop_edit_upload',
                                                     kwargs={
                                                         'year':
                                                         self.instance.year.pk,
                                                         'name':
                                                         self.instance.name
                                                     })
        mce_attrs['readonly'] = self.fields[
            'page_content'].disabled  # does not seem to respect the Django field settings for some reason
        self.fields['page_content'].widget = InitializedTinyMCE(
            mce_attrs=mce_attrs)

        # Layout
        self.fieldset_general = Fieldset(
            "Ogólne",
            Div(Div(PrependedAppendedText(
                'name',
                workshop_url[0] + '<b>' + str(year.pk) + '</b>' +
                workshop_url[1],
                workshop_url[2],
                template=
                "%s/layout/prepended_appended_text_with_mobile_support.html"),
                    css_class='col-lg-12'),
                Div('title', css_class='col-lg-12'),
                css_class='row'),
            Div(Div('type', css_class='col-lg-6'),
                Div('category', css_class='col-lg-6'),
                css_class='row'),
        )
        if profile_warnings:
            for message in profile_warnings:
                self.fieldset_general.fields.append(
                    Alert(content=message,
                          dismiss=False,
                          css_class='alert-info'))
        self.fieldset_proposal = Fieldset(
            "Opis propozycji",
            'proposition_description',
        )
        self.fieldset_qualification = Fieldset(
            "Kwalifikacja",
            'is_qualifying',
            Div('qualification_problems',
                Div(Div('max_points', css_class='col-lg-6'),
                    Div('qualification_threshold', css_class='col-lg-6'),
                    css_class='row'),
                'solution_uploads_enabled',
                css_id='qualification_settings'),
        )
        self.fieldset_public_page = Fieldset("Strona warsztatów",
                                             'short_description',
                                             'page_content',
                                             'page_content_is_public')
        self.fieldset_submit = FormActions(
            StrictButton(
                'Zapisz' if self.instance and self.instance.pk else 'Zgłoś!',
                type='submit',
                css_class='btn-outline-primary btn-lg mx-1 my-3'),
            css_class='text-right',
        )

        if not self.instance or not self.instance.is_publicly_visible():
            for field in [
                    'qualification_problems', 'is_qualifying',
                    'solution_uploads_enabled', 'max_points',
                    'qualification_threshold', 'short_description',
                    'page_content', 'page_content_is_public'
            ]:
                del self.fields[field]

            self.helper.layout = Layout(
                self.fieldset_general,
                self.fieldset_proposal,
                self.fieldset_submit,
            )
        else:
            if not has_perm_to_edit:
                self.helper.layout = Layout(
                    self.fieldset_general,
                    self.fieldset_proposal,
                    self.fieldset_qualification,
                    self.fieldset_public_page,
                )
            else:
                self.helper.layout = Layout(
                    self.fieldset_general,
                    self.fieldset_proposal,
                    self.fieldset_qualification,
                    self.fieldset_public_page,
                    self.fieldset_submit,
                )

    def clean(self):
        super(WorkshopForm, self).clean()
        if not self.instance.is_workshop_editable():
            raise ValidationError(
                'Nie można edytować warsztatów z poprzednich lat')

    def validate_unique(self):
        # Must remove year field from exclude in order
        # for the unique_together constraint to be enforced.
        exclude = self._get_validation_exclusions()
        exclude.remove('year')

        try:
            self.instance.validate_unique(exclude=exclude)
        except ValidationError as e:
            self._update_errors(e.message_dict)
Ejemplo n.º 10
0
 class Meta:
     model = Person
     fields = ["last_name", "first_name", "user"]
     widgets = {"user": Select2Widget(attrs={"class": "browser-default"})}
Ejemplo n.º 11
0
    class Meta:
        model = Timesheet
        fields = ('dockets', 'timesheet_date', 'week_start_date',
                  'week_end_date', 'docket_shift', 'equipment',
                  'equipment_num', 'company', 'project', 'start_time',
                  'finish_time', 'lunch', 'smoko', 'additional_info')

        widgets = {
            'docket':
            forms.Select(attrs={
                'id': 'docket_tag',
                'class': 'form_control_timesheet form-control'
            }),
            'timesheet_date':
            forms.DateInput(
                attrs={
                    'id': 'docket_date_tag',
                    'class': 'form_control_timesheet form-control '
                }),
            'docket_shift':
            forms.Select(
                attrs={
                    'id': 'docket_shift_tag',
                    'class': 'form_control_timesheet form-control '
                }),
            'equipment':
            Select2Widget(
                attrs={
                    'id': 'equipment_name_tag',
                    'class': 'form_control_timesheet form-control'
                }),
            'equipment_num':
            forms.TextInput(
                attrs={
                    'id': 'equipment_num_tag',
                    'class': 'form_control_timesheet form-control '
                }),
            'start_time':
            forms.TimeInput(
                attrs={
                    'id': 'start_time_tag',
                    'class': 'form_control_timesheet form-control'
                }),
            'finish_time':
            forms.TimeInput(
                attrs={
                    'id': 'finish_time_tag',
                    'class': 'form_control_timesheet form-control'
                }),
            'lunch':
            forms.Select(attrs={
                'id': 'lunch_tag',
                'class': 'form_control_timesheet form-control '
            }),
            'smoko':
            forms.Select(attrs={
                'id': 'smoko_tag',
                'class': 'form_control_timesheet form-control '
            }),
            'additional_info':
            forms.Textarea(
                attrs={
                    'id': 'additional_info_tag',
                    'class': 'form_control_timesheet form-control '
                }),
        }
Ejemplo n.º 12
0
 class Meta:
     exclude = 'quantity', 'product_component', 'equipment_component',
     model = models.InventoryItem
     widgets = {'supplier': Select2Widget(attrs={'data-width': '24rem'})}
Ejemplo n.º 13
0
 class Meta:
     exclude = "maximum_stock_level", "minimum_order_level", "product_component", "equipment_component",
     model = models.InventoryItem
     widgets = {'supplier': Select2Widget(attrs={'data-width': '24rem'})}
Ejemplo n.º 14
0
class ManageActiveGroupMeetingsForm(ModelForm):
    member = forms.ModelChoiceField(
        widget=Select2Widget(), queryset=ElecteeGroup.get_current_leaders())
    amount_completed = forms.IntegerField(min_value=0, label='Team Meetings')

    class Meta:
        model = ProgressItem
        fields = ['member', 'amount_completed']

    def __init__(self, *args, **kwargs):
        extra_amt = 0
        instance = kwargs.get('instance', None)
        initial = kwargs.get('initial', {})
        init_val = int(0)
        if instance:
            extra_meetings = ProgressItem.objects.filter(
                term=AcademicTerm.get_current_term(),
                member=instance.member,
                event_type__name='Extra Team Meetings',
            )
            if extra_meetings.exists():
                extra_amt = extra_meetings.aggregate(Sum('amount_completed'))
                extra_amt = extra_amt['amount_completed__sum']
            init_val = int(instance.amount_completed + extra_amt)

        initial['amount_completed'] = init_val
        kwargs['initial'] = initial
        super(ManageActiveGroupMeetingsForm, self).__init__(*args, **kwargs)

    def save(self, commit=True):
        instance = super(ManageActiveGroupMeetingsForm,
                         self).save(commit=False)
        term = AcademicTerm.get_current_term()
        instance.term = term
        instance.date_completed = date.today()
        instance.name = 'Team Meetings'
        extra_meetings = ProgressItem.objects.filter(
            term=term,
            member=instance.member,
            event_type__name='Extra Team Meetings',
        )
        group = ElecteeGroup.objects.filter(
            Q(leaders=instance.member) | Q(officers=instance.member))
        group = group.filter(term=term)
        dist = DistinctionType.objects.filter(
            status_type__name='Electee', standing_type__name='Undergraduate')
        if group.exists():
            print group
            if group[0].members.exists():
                print group[0]
                standing = group[0].members.all()[0].standing
                dist = DistinctionType.objects.filter(
                    status_type__name='Electee', standing_type=standing)
        group_meeting_req = Requirement.objects.filter(
            distinction_type=dist,
            event_category__name='Team Meetings',
            term=term.semester_type)
        if group_meeting_req:
            amount_group_req = group_meeting_req[0].amount_required
        else:
            amount_group_req = 0
        if extra_meetings.count(
        ) > 1 or instance.amount_completed <= amount_group_req:
            extra_meetings.delete()

        if not extra_meetings.exists(
        ) and instance.amount_completed > amount_group_req:
            extra_meeting = ProgressItem(term=term,
                                         member=instance.member,
                                         date_completed=date.today())
            extra_meeting.event_type = EventCategory.objects.get(
                name='Extra Team Meetings')
            extra_meeting.amount_completed = instance.amount_completed - amount_group_req
            extra_meeting.save()
        elif instance.amount_completed > amount_group_req:
            extra_meeting = extra_meetings[0]
            extra_meeting.amount_completed = instance.amount_completed - amount_group_req
            extra_meeting.save()
        instance.event_type = EventCategory.objects.get(name='Team Meetings')
        if instance.amount_completed > amount_group_req:
            instance.amount_completed = amount_group_req
        if commit:
            instance.save()
        return instance
Ejemplo n.º 15
0
class WidgetSelectForm(SelfHandlingForm):

    cls_name = forms.ChoiceField(label=_("Widget Type"),
                                 choices=[],
                                 required=True,
                                 widget=Select2Widget())

    first = forms.BooleanField(label=_('First ?'),
                               help_text=_(
                                   'If is checked, widget will be'
                                   ' placed as first widget in this region'),
                               initial=False,
                               required=False)

    page_id = forms.IntegerField(widget=forms.widgets.HiddenInput, )

    ordering = forms.IntegerField(widget=forms.widgets.HiddenInput, initial=99)
    region = forms.ChoiceField(label=_('Region'), widget=Select2Widget())
    parent = forms.IntegerField(widget=forms.widgets.HiddenInput, )

    def __init__(self, *args, **kwargs):
        request = kwargs.pop('request', None)
        page_id = kwargs.pop('page_id', None)
        region_name = kwargs.pop('region', None)
        feincms_cls_name = kwargs.pop('cls_name', None)
        self.next_view = kwargs.pop('next_view', None)

        module, cls = feincms_cls_name.split('.')
        ObjectCls = apps.get_model(module, cls)
        feincms_object = ObjectCls.objects.get(id=page_id)

        super(WidgetSelectForm, self).__init__(*args, **kwargs)

        self.fields['page_id'].initial = feincms_object.id
        self.fields['region'].initial = region_name

        # load template regions
        self.fields['region'].choices = \
            [(str(region.key),
              '%s%s' % (
                str(region.title),
                _(' - Inherited') if region.inherited else ''))
             for region in feincms_object.template.regions]

        if region_name:
            self.fields['ordering'].initial = \
                len(getattr(feincms_object.content, region_name, [])) + 1

        self.fields['parent'].initial = feincms_object.id

        choices, grouped, ungrouped = get_grouped_widgets(
            feincms_object, request)

        # reduce choices for validation
        self.fields['cls_name'].choices = [(str(choice[0]), str(choice[1]))
                                           for choice in choices]

        # for now ungrouped to grouped
        grouped['Web'] = ungrouped + grouped.get('Web', [])

        self.helper.layout = Layout(
            Field('parent'),
            Field('page_id'),
            Field('ordering'),
            'cls_name',
            Field('region'),
            Field('first'),
        )

    def handle(self, request, data):
        # NOTE (majklk): This is a bit of a hack, essentially rewriting this
        # request so that we can chain it as an input to the next view...
        # but hey, it totally works.
        request.method = 'GET'

        first = data.pop('first', None)

        if first:
            data['ordering'] = 0

        return self.next_view.as_view()(request, **data)
Ejemplo n.º 16
0
 class Meta:
     model = ModuleHECoSSubject
     fields = ['hecos_subject', 'percentage']
     widgets = {'hecos_subject': Select2Widget()}
Ejemplo n.º 17
0
 def test_js_setting(self, settings):
     settings.SELECT2_JS = "alternate.js"
     sut = Select2Widget()
     result = sut.media.render()
     assert "alternate.js" in result
     assert "django_select2/django_select2.js" in result
Ejemplo n.º 18
0
 class Meta:
     model = models.Module
     fields = [
         'code',
         'title',
         'url',
         'division',
         'portfolio',
         'format',
         'phone',
         'email',
         'subjects',
         'marketing_types',
         'non_credit_bearing',
         'default_non_credit',
         'start_date',
         'end_date',
         'start_time',
         'end_time',
         'meeting_time',
         'open_date',
         'closed_date',
         'publish_date',
         'unpublish_date',
         'location',
         'room',
         'room_setup',
         'max_size',
         'single_places',
         'twin_places',
         'address',
         'no_meetings',
         'week_number',
         'cost_centre',
         'activity_code',
         'source_of_funds',
         'custom_fee',
         'snippet',
         'notification',
         'overview',
         'programme_details',
         'selection_criteria',
         'course_aims',
         'certification',
         'assessment_methods',
         'it_requirements',
         'level_and_demands',
         'recommended_reading',
         'teaching_methods',
         'teaching_outcomes',
         'accommodation',
         'payment',
         'scholarships',
         'how_to_apply',
         'further_details',
         'terms_and_conditions',
         'enrol_online',
         'apply_url',
         'no_search',
         'mailing_list',
         'image',
         'credit_points',
         'points_level',
         'note',
         'direct_enrolment',
     ]
     widgets = {
         'closed_date':
         widgets.DateTimePickerInput(),
         'subjects':
         Select2MultipleWidget(),
         'marketing_types':
         Select2MultipleWidget(),
         'non_credit_bearing':
         widgets.ToggleWidget(
             attrs={
                 'data-on': 'Non-credit',
                 'data-off': 'For credit',
                 'data-onstyle': 'warning',
                 'data-offstyle': 'success',
             }),
         'default_non_credit':
         widgets.ToggleWidget(
             attrs={
                 'data-on': 'Non-credit',
                 'data-off': 'For credit',
                 'data-offstyle': 'success',
                 'data-onstyle': 'warning',
             }),
         'enrol_online':
         widgets.ToggleWidget(attrs={
             'data-on': 'Allowed',
             'data-off': 'Not allowed'
         }),
         'direct_enrolment':
         widgets.ToggleWidget(attrs={
             'data-on': 'Allowed',
             'data-off': 'Not allowed'
         }),
         'note':
         Textarea(),
         'notification':
         CKEditorWidget(config_name='links_only'),
         **{field: CKEditorUploadingWidget()
            for field in HTML_FIELDS},
         **{field: widgets.DatePickerInput()
            for field in DATE_FIELDS},
         'start_time':
         widgets.TimePickerInput(),
         'end_time':
         widgets.TimePickerInput(),
         'location':
         Select2Widget(),
     }
Ejemplo n.º 19
0
 def test_custom_tag_attrs_Select2Widget(self):
     widget = Select2Widget(attrs={"data-minimum-input-length": "3"})
     output = widget.render("name", "value")
     assert 'data-minimum-input-length="3"' in output
Ejemplo n.º 20
0
 class Meta:
     if use_select2:
         widgets = {
             'contest': Select2Widget(),
             'profile': HeavySelect2Widget(data_view='contest_profile_select2'),
         }
Ejemplo n.º 21
0
    def form_members(self):
        experience = forms.ChoiceField(choices=Juror.EXPERIENCES, required=False,
                                          widget=Select2Widget())

        return {"experience":experience}
Ejemplo n.º 22
0
    'pasteInline': ['strong', 'b', 'i', 'em'],
    'minHeight': 75,
}

DEFAULT_FORMFIELD_OVERRIDES = {
    models.ManyToManyField: {
        'widget':
        Select2MultipleWidget(attrs={
            'data-placeholder': 'Ninguno',
            'data-minimum-results-for-search': 10
        })
    },
    models.ForeignKey: {
        'widget':
        Select2Widget(attrs={
            'data-placeholder': 'Ninguno',
            'data-minimum-results-for-search': 10
        })
    },
    ImageField: {
        'widget': AdminImageWidget
    },
    # models.DateTimeField: {
    #     'widget': SuitSplitDateTimeWidget
    # },
    models.DateField: {
        'widget': SuitDateWidget
    },
    models.TextField: {
        'widget':
        AutosizedTextarea(attrs={
            'rows': 5,
Ejemplo n.º 23
0
class HealerSearchForm(forms.Form):
    '''
	modality = forms.CharField(max_length=50, label="Type", required=False,
							   widget=forms.TextInput(attrs={
									'placeholder': 'Specialty (optional)',
									'id': 'healer_modality_input',
									'class': 'modality_input'
							   }))

	'''
    search_city_or_zipcode = forms.CharField(
        max_length=50,
        label="City",
        required=False,
        widget=forms.TextInput(attrs={
            'placeholder': 'City or Town',
            'class': 'search_city_or_zipcode'
        }))
    zipcode = forms.CharField(
        required=False, widget=forms.HiddenInput(attrs={'class': 'zipcode'}))
    city = forms.CharField(max_length=50,
                           required=False,
                           widget=forms.HiddenInput())
    state = forms.CharField(max_length=2,
                            required=False,
                            widget=forms.HiddenInput())

    modality_id = forms.IntegerField(
        required=False,
        widget=forms.HiddenInput(attrs={'id': 'modality_id_hidden'}))
    modality_category_id = forms.IntegerField(
        required=False,
        widget=forms.HiddenInput(attrs={'id': 'modality_category_id_hidden'}))

    name_or_email = forms.CharField(
        required=False,
        max_length=75,
        label="Provider Name",
        widget=forms.TextInput(
            attrs={
                'size': 25,
                'maxlength': 75,
                'placeholder': 'Provider Name or Email'
                #												'id': ''
            }))

    modality2 = forms.ChoiceField(
        required=False,
        widget=Select2Widget(attrs={'data-placeholder': 'Any Specialty'}),
        #[ ('', 'Any Specialty') ] +
        choices=categories_as_choices())

    modality3 = forms.ChoiceField(
        required=False,
        widget=Select2Widget(attrs={'data-placeholder': 'Any Specialty'}),
        #[ ('', 'Any Specialty') ] +
        choices=categories_as_choices())

    order_by_top = forms.BooleanField(required=False,
                                      widget=forms.HiddenInput())

    def __init__(self, *args, **kwargs):
        self.city_or_zipcode_placeholder = kwargs.pop(
            'city_or_zipcode_placeholder', 'City')
        super(HealerSearchForm, self).__init__(*args, **kwargs)

    def get_zipcode(self):
        if self.cleaned_data.get('city', False):
            try:
                return Zipcode.objects.filter(
                    city=self.cleaned_data['city'].upper(),
                    state=self.cleaned_data['state'])[:1][0]
            except (Zipcode.DoesNotExist, IndexError):
                return
        elif self.cleaned_data.get('zipcode', False):
            try:
                return Zipcode.objects.get(code=self.cleaned_data['zipcode'])
            except Zipcode.DoesNotExist:
                return
Ejemplo n.º 24
0
    def parse_params(self, request):
        trn = request.user.profile.tournament

        self.filters = [
            {
                "name": "Roles",
                "filter": "roles__in",
                "elements": trn.participationrole_set.all()
            },
            {
                'name': "Groups",
                "elements": trn.groups.all(),
                "filter": "groups__in"
            },
            {
                'name': "Team",
                "elements": trn.team_set.all(),
                "filter": "team__in"
            },
        ]

        self._filters = {}
        self._excludes = {}

        for fname in [x['filter'] for x in self.filters]:
            try:
                inarg = request.GET.getlist("in_%s" % fname, None)
                if len(inarg) > 0:
                    self._filters[fname] = list(map(int, inarg))
                exarg = request.GET.getlist("ex_%s" % fname, None)
                if len(exarg) > 0:
                    self._excludes[fname] = list(map(int, exarg))
            except:
                pass

        ex_query = Q()

        for k in self._excludes:
            ex_query |= Q(**{k: self._excludes[k]})

        person = ModelDeleteListField(
            queryset=Attendee.objects.filter(tournament=trn, **self._filters).
            exclude(ex_query).order_by("active_user__user__last_name").
            prefetch_related('roles', 'groups', 'active_user__user',
                             'teammember_set__team__origin'))

        allowedros = [
            r.id for r in trn.participationrole_set.all()
            if _more_perm_than_role(request.user, r)
        ]

        roles = forms.ModelMultipleChoiceField(
            queryset=ParticipationRole.objects.filter(id__in=allowedros),
            required=False,
            widget=Select2MultipleWidget())

        allowedgrs = [
            gr.id for gr in trn.groups.all()
            if _more_perm_than_group(request.user, gr)
        ]

        groups = forms.ModelMultipleChoiceField(
            queryset=Group.objects.filter(id__in=allowedgrs),
            required=False,
            widget=Select2MultipleWidget())

        team = forms.ModelChoiceField(
            queryset=Team.objects.filter(tournament=trn),
            required=False,
            widget=Select2Widget())

        template = forms.ModelChoiceField(
            queryset=trn.template_set.filter(type=Template.PERSONS),
            required=False,
            widget=Select2Widget())

        conflicting = forms.ModelChoiceField(
            queryset=trn.attendeeproperty_set.filter(
                type=AttendeeProperty.CONFLICT_ORIGINS),
            required=False,
            widget=Select2Widget)

        self.form = type(
            "PersonsForm", (forms.Form, ), {
                'persons': person,
                'roles': roles,
                'groups': groups,
                "template": template,
                "team": team,
                "conflicting": conflicting
            })
Ejemplo n.º 25
0
 def test_css_setting(self, settings):
     settings.SELECT2_CSS = 'alternate.css'
     sut = Select2Widget()
     result = sut.media.render()
     assert 'alternate.css' in result
Ejemplo n.º 26
0
class AddProjectReportForm(Form):
    """
    A form for selecting a project report to associate with a particular event.
    """
    report = forms.ModelChoiceField(widget=Select2Widget(),
                                    queryset=ProjectReport.objects.all())
Ejemplo n.º 27
0
 def test_tag_attrs_Select2Widget(self):
     widget = Select2Widget()
     output = widget.render('name', 'value')
     assert 'data-minimum-input-length="0"' in output
Ejemplo n.º 28
0
class BaseEventForm(ModelForm):
    """
    Form used in creating or editing event objects. This only creates the event
    itself, not the shifts, though the formset for creating those is often
    paired with this.
    """
    TWEET_CHOICES = (
        ('N', 'No Tweet'),
        ('T', 'Tweet normally'),
        ('H', 'Tweet with #UmichEngin'),
    )
    leaders = forms.ModelMultipleChoiceField(
        widget=Select2MultipleWidget(), queryset=MemberProfile.get_members())
    tweet_option = forms.ChoiceField(choices=TWEET_CHOICES, initial='N')
    agenda = forms.ModelChoiceField(
        widget=Select2Widget(),
        queryset=MeetingMinutes.objects.filter(
            semester=AcademicTerm.get_current_term(),
            meeting_type__in=['NI', 'MM']),
        required=False,
    )

    class Meta:
        model = CalendarEvent
        fields = [
            'name',
            'term',
            'event_type',
            'event_class',
            'description',
            'agenda',
            'google_cal',
            'leaders',
            'assoc_officer',
            'announce_start',
            'announce_text',
            'preferred_items',
            'min_unsign_up_notice',
            'min_sign_up_notice',
            'members_only',
            'needs_carpool',
            'use_sign_in',
            'allow_advance_sign_up',
            'needs_facebook_event',
            'needs_flyer',
            'requires_UM_background_check',
            'requires_AAPS_background_check',
            'mutually_exclusive_shifts',
            'allow_overlapping_sign_ups',
            'needs_COE_event',
        ]

    def clean(self):
        """
        Ensures that tweets are not sent or COE events not created for events
        which are marked as members-only
        """
        cleaned_data = super(BaseEventForm, self).clean()
        members_only = cleaned_data.get('members_only')
        tweet_option = cleaned_data.get('tweet_option')
        coe_option = cleaned_data.get('needs_COE_event')
        if members_only and not tweet_option == 'N':
            raise ValidationError(
                _('Tweeting is not currentlys supported'
                  ' for members-only events'))
        if members_only and coe_option:
            raise ValidationError(
                _('Members-only events cannot be on the'
                  ' COE Calendar.'))
        return cleaned_data
Ejemplo n.º 29
0
 def test_default_media(self):
     sut = Select2Widget()
     result = sut.media.render()
     assert f'//cdnjs.cloudflare.com/ajax/libs/select2/{settings.SELECT2_LIB_VERSION}/js/select2.min.js' in result
     assert f'//cdnjs.cloudflare.com/ajax/libs/select2/{settings.SELECT2_LIB_VERSION}/css/select2.min.css' in result
     assert 'django_select2/django_select2.js' in result
Ejemplo n.º 30
0
 class Meta:
     model = ProtocoloLondres
     fields = ('cronologia', 'acciones_inseguras', 'factores_ambiental',
               'factores_equipo', 'responsable', 'fecha_solucion',
               'factores_individuo', 'factores_institucional',
               'factores_organizacion', 'factores_paciente',
               'factores_tecnologia', 'actividades', 'seguimiento')
     widgets = {
         'cronologia':
         forms.Textarea(attrs={
             'rows': 5,
             'style': 'resize:none;'
         }),
         'acciones_inseguras':
         forms.Textarea(attrs={
             'rows': 5,
             'style': 'resize:none;'
         }),
         'factores_ambiental':
         forms.Textarea(attrs={
             'rows': 5,
             'style': 'resize:none;'
         }),
         'factores_equipo':
         forms.Textarea(attrs={
             'rows': 5,
             'style': 'resize:none;'
         }),
         'factores_individuo':
         forms.Textarea(attrs={
             'rows': 5,
             'style': 'resize:none;'
         }),
         'factores_institucional':
         forms.Textarea(attrs={
             'rows': 5,
             'style': 'resize:none;'
         }),
         'factores_organizacion':
         forms.Textarea(attrs={
             'rows': 5,
             'style': 'resize:none;'
         }),
         'factores_paciente':
         forms.Textarea(attrs={
             'rows': 5,
             'style': 'resize:none;'
         }),
         'factores_tecnologia':
         forms.Textarea(attrs={
             'rows': 5,
             'style': 'resize:none;'
         }),
         'actividades':
         forms.Textarea(attrs={
             'rows': 5,
             'style': 'resize:none;'
         }),
         'seguimiento':
         forms.Textarea(attrs={
             'rows': 5,
             'style': 'resize:none;'
         }),
         # "fecha_solucion": forms.SelectDateWidget,
         "empleado":
         Select2Widget(),
     }
     labels = {
         'cronologia': "Cronología",
         'acciones_inseguras': "Acciones inseguras",
         'factores_ambiental':
         "Factores contributivos relacionados con el ambiente",
         'factores_equipo':
         "Factores contributivos relacionados con el equipo de trabajo",
         'factores_individuo':
         "Factores contributivos relacionados con el individuo",
         'factores_institucional':
         "Factores relacionados con el contexto institucional",
         'factores_organizacion':
         "Factores contributivos relacionados con organización y gerencia",
         'factores_paciente':
         "Factores contributivos relacionados con el paciente",
         'factores_tecnologia':
         "Factores contributivos relacionados con la Tarea y Tecnología",
         'actividades': "Actividades",
         'seguimiento': "Seguimiento",
         'responsable': "Responsable de realizar el protocolo",
         'fecha_solucion': "Fecha creación del protocolo"
     }