Exemplo n.º 1
0
 def finalize_form(self):
     if self.request.user.is_god():
         self.add_field(
             'roles',
             forms.ModelMultipleChoiceField(
                 label=_("User Roles"),
                 help_text=_(
                     "This user roles. Roles are sets of user permissions"),
                 widget=forms.CheckboxSelectMultiple,
                 queryset=Role.objects.order_by('name').all(),
                 error_messages={
                     'required':
                     _("User must have at least one role assigned.")
                 }))
     else:
         self.add_field(
             'roles',
             forms.ModelMultipleChoiceField(
                 label=_("User Roles"),
                 help_text=_(
                     "This user roles. Roles are sets of user permissions"),
                 widget=forms.CheckboxSelectMultiple,
                 queryset=Role.objects.filter(
                     protected__exact=False).order_by('name').all(),
                 required=False))
Exemplo n.º 2
0
    def finalize_form(self):
        # Roles list
        if self.request.user.is_god():
            self.add_field(
                'roles',
                forms.ModelMultipleChoiceField(
                    label=_("User Roles"),
                    help_text=_(
                        "This user roles. Roles are sets of user permissions"),
                    widget=forms.CheckboxSelectMultiple,
                    queryset=Role.objects.order_by('name').all(),
                    error_messages={
                        'required':
                        _("User must have at least one role assigned.")
                    }))
        else:
            self.add_field(
                'roles',
                forms.ModelMultipleChoiceField(
                    label=_("User Roles"),
                    help_text=_(
                        "This user roles. Roles are sets of user permissions"),
                    widget=forms.CheckboxSelectMultiple,
                    queryset=Role.objects.filter(
                        protected__exact=False).order_by('name').all(),
                    required=False))

        # Keep non-gods from editing protected members sign-in credentials
        if self.user.is_protected() and not self.request.user.is_god(
        ) and self.user.pk != self.request.user.pk:
            del self.fields['email']
            del self.fields['new_password']
Exemplo n.º 3
0
class EnrollForm(forms.Form):
    students = forms.ModelMultipleChoiceField(
        queryset=Student.objects.all(),
        widget = forms.SelectMultiple(attrs={'class':'multiselect',}),
        required=False)
    cohorts = forms.ModelMultipleChoiceField(
        queryset=Cohort.objects.all(),
        widget = forms.SelectMultiple(attrs={'class': 'field picker', 'style': 'min-height: 400px;'}),
        required=False)
Exemplo n.º 4
0
class TestForm(forms.ModelForm):
    class Meta:
        model = Test
        fields = ('name', 'school_year', 'teachers', 'department',
                  'marking_period', 'courses')
        widgets = {
            'name':
            forms.TextInput,
            'school_year':
            forms.Select,
            'department':
            forms.Select,
            'marking_period':
            forms.Select,
            'course':
            forms.SelectMultiple(attrs={
                'size': '10',
                'style': 'height:100%;'
            }),
        }

    teachers = AutoCompleteSelectMultipleField('faculty',
                                               required=True,
                                               help_text="")
    students = forms.ModelMultipleChoiceField(
        queryset=Student.objects.filter(is_active=True),
        widget=forms.SelectMultiple(attrs={'class': 'multiselect'}),
        required=False)
    quick_number_questions = forms.IntegerField(max_value=100,
                                                min_value=1,
                                                required=False,
                                                label="Number of Questions")
    quick_number_answers = forms.IntegerField(max_value=6,
                                              min_value=2,
                                              required=False,
                                              label="Number of Answers",
                                              help_text="Per Question")
    enroll_cohorts = forms.ModelMultipleChoiceField(
        queryset=Cohort.objects.all(),
        required=False,
        widget=forms.SelectMultiple(attrs={
            'size': '10',
            'style': 'height:100%;'
        }))

    def save(self, *args, **kwargs):
        instance = super(TestForm, self).save(*args, **kwargs)
        instance.enroll_students(self.cleaned_data['students'])
        return instance
Exemplo n.º 5
0
class GradeFilterForm(TimeBasedForm):
    marking_period = forms.ModelMultipleChoiceField(required=False, queryset=MarkingPeriod.objects.all())

    filter_choices = (
        ("lt", "Less Than"),
        ("lte", "Less Than Equals"),
        ("gt", "Greater Than"),
        ("gte", "Greater Than Equals"),
    )

    grade = forms.CharField(max_length=5,
                            widget=forms.TextInput(attrs={'placeholder': 'Enter Grade Here'}),
                            required=False,
                            help_text="P counts as 100%, F counts as 0%",)
    grade_filter = forms.ChoiceField(choices=filter_choices)
    grade_times = StarOrIntField(max_length=2, required=False, initial="*", widget=forms.TextInput(attrs={'style':'width:20px;'}))
    final_grade = forms.CharField(max_length=5,
                            widget=forms.TextInput(attrs={'placeholder': 'Enter Grade Here'}),
                            required=False,
                            help_text="P counts as 100%, F counts as 0%",)
    final_grade_filter = forms.ChoiceField(choices=filter_choices)
    final_grade_times = StarOrIntField(max_length=2, required=False, initial="*", widget=forms.TextInput(attrs={'style':'width:20px;'}))

    gpa = forms.DecimalField(max_digits=5, decimal_places=2, required=False)
    gpa_equality =  forms.ChoiceField(choices=filter_choices)
    filter_year = forms.ModelMultipleChoiceField(required=False, queryset=GradeLevel.objects.all())
    in_individual_education_program = forms.BooleanField(required=False)
    #disc
    if 'ecwsp.discipline' in settings.INSTALLED_APPS:
        from ecwsp.discipline.models import DisciplineAction
        filter_disc_action = forms.ModelChoiceField(required=False, queryset=DisciplineAction.objects.all())
        filter_disc = forms.ChoiceField(choices=filter_choices, required=False)
        filter_disc_times = forms.CharField(max_length=2, required=False, widget=forms.TextInput(attrs={'style':'width:20px;'}))
        # Aggregated
        aggregate_disc = forms.ChoiceField(choices=filter_choices, required=False)
        aggregate_disc_times = forms.CharField(max_length=2, required=False, widget=forms.TextInput(attrs={'style':'width:20px;'}))
        aggregate_disc_major = forms.BooleanField(required=False)
    # Absences
    filter_attn = forms.ChoiceField(choices=filter_choices, required=False)
    filter_attn_times = forms.CharField(max_length=2, required=False, widget=forms.TextInput(attrs={'style':'width:20px;'}))
    # Tardies
    filter_tardy = forms.ChoiceField(choices=filter_choices, required=False)
    filter_tardy_times = forms.CharField(max_length=2, required=False, widget=forms.TextInput(attrs={'style':'width:20px;'}))
Exemplo n.º 6
0
class AttachmentTypeForm(Form):
    name = forms.CharField(
        label=_("Type Name"),
        max_length=256,
        validators=[
            validate_sluggable(_("Name must contain alphanumeric characters."),
                               _("Type name is too long."))
        ])
    extensions = forms.CharField(
        label=_("File Extensions"),
        help_text=
        _("Enter file name extensions used by this attachment type. Don't enter dots. If this attachment type supports more than one extension, separate them with coma, for example: jpg,jpeg."
          ),
        max_length=255)
    size_limit = forms.IntegerField(
        label=_("Hard File Size Limit"),
        help_text=
        _("In addition to role-based single uploaded file size limit you can set additional limit for all future attachments of this type. To set limit, enter number of kilobytes, otherwhise enter 0. If limit is defined, forum will use lower limit (this one or role one) during validation of uploaded file, unless uploader has no single uploaded file size limit, which is when uploaded file size validation is not performed."
          ),
        min_value=0,
        initial=0)
    roles = forms.ModelMultipleChoiceField(
        label=_("Restrict to certain roles"),
        required=None,
        help_text=
        _("You can restrict uploading files of this type to users with certain roles by selecting them in above list."
          ),
        queryset=Role.objects.order_by('name'),
        widget=forms.CheckboxSelectMultiple)

    def clean_extension(self, extension):
        extension = extension.strip().lower()
        try:
            while extension[0] == '.':
                extension = extension[1:]
        except IndexError:
            return None
        return extension

    def clean_extensions(self):
        clean_data = []
        data = self.cleaned_data['extensions'].strip().lower()
        for extension in data.split(','):
            extension = self.clean_extension(extension)
            if extension and not extension in clean_data:
                clean_data.append(extension)
        if not clean_data:
            raise forms.ValidationError(
                _("You have to specify at least one file extension."))
        return ','.join(clean_data)
Exemplo n.º 7
0
class GradebookFilterForm(forms.Form):
    cohort = forms.ModelChoiceField(
        queryset=None,
        widget=forms.Select(
            attrs={'onchange': 'submit_filter_form(this.form)'}),
        required=False)
    marking_period = forms.ModelChoiceField(
        queryset=None,
        widget=forms.Select(
            attrs={'onchange': 'submit_filter_form(this.form)'}),
        required=False)
    benchmark = forms.ModelMultipleChoiceField(
        queryset=None,
        required=False,
        widget=forms.SelectMultiple(attrs={'class': 'simple_multiselect'}))
    category = forms.ModelChoiceField(
        queryset=None,
        widget=forms.Select(
            attrs={'onchange': 'submit_filter_form(this.form)'}),
        required=False)
    assignment_type = forms.ModelChoiceField(
        queryset=None,
        widget=forms.Select(
            attrs={'onchange': 'submit_filter_form(this.form)'}),
        required=False)
    name = forms.CharField(required=False)
    date_begin = forms.DateField(
        required=False,
        widget=forms.DateInput(attrs={'placeholder': 'Later than'}),
        validators=settings.DATE_VALIDATORS)
    date_end = forms.DateField(
        required=False,
        widget=forms.DateInput(attrs={'placeholder': 'Earlier than'}),
        validators=settings.DATE_VALIDATORS)

    def update_querysets(self, course_section):
        self.fields['cohort'].queryset = Cohort.objects.filter(
            Q(percoursesectioncohort=None,
              student__coursesection=course_section)
            | Q(percoursesectioncohort__coursesection=course_section)
        ).distinct().order_by('name')
        self.fields['marking_period'].queryset = MarkingPeriod.objects.filter(
            coursesection=course_section).distinct()
        self.fields['benchmark'].queryset = Benchmark.objects.filter(
            item__course_section=course_section).distinct()
        self.fields[
            'assignment_type'].queryset = AssignmentType.objects.filter(
                item__course_section=course_section).distinct()
        self.fields['category'].queryset = Category.objects.filter(
            item__course_section=course_section).distinct()
Exemplo n.º 8
0
 def finalize_form(self):
     if self.request.user.is_god():
         self.add_field(
             'roles',
             forms.ModelMultipleChoiceField(
                 label=_("Rank Roles"),
                 help_text=
                 _("You can grant users with this rank extra roles to serve either as rewards or signs of trust to active members."
                   ),
                 widget=forms.CheckboxSelectMultiple,
                 queryset=Role.objects.order_by('name').all(),
                 required=False))
     else:
         self.add_field(
             'roles',
             forms.ModelMultipleChoiceField(
                 label=_("Rank Roles"),
                 help_text=
                 _("You can grant users with this rank extra roles to serve either as rewards or signs of trust to active members."
                   ),
                 widget=forms.CheckboxSelectMultiple,
                 queryset=Role.objects.filter(
                     protected__exact=False).order_by('name').all(),
                 required=False))
Exemplo n.º 9
0
class SearchUsersForm(Form):
    username = forms.CharField(label=_("Username"),
                               max_length=255,
                               required=False)
    email = forms.CharField(label=_("E-mail Address"),
                            max_length=255,
                            required=False)
    activation = forms.TypedMultipleChoiceField(
        label=_("Activation Requirement"),
        widget=forms.CheckboxSelectMultiple,
        choices=((0, _("Already Active")), (1, _("By User")),
                 (2, _("By Administrator"))),
        coerce=int,
        required=False)
    rank = forms.ModelMultipleChoiceField(
        label=_("Rank is"),
        widget=forms.CheckboxSelectMultiple,
        queryset=Rank.objects.order_by('order').all(),
        required=False)
    role = forms.ModelMultipleChoiceField(
        label=_("Has Role"),
        widget=forms.CheckboxSelectMultiple,
        queryset=Role.objects.order_by('name').all(),
        required=False)
Exemplo n.º 10
0
class NewsletterForm(Form):
    name = forms.CharField(
        label=_("Newsletter Name"),
        help_text=
        _("Newsletter name will be used as message subject in e-mails sent to members."
          ),
        max_length=255,
        validators=[
            validate_sluggable(
                _("Newsletter name must contain alphanumeric characters."),
                _("Newsletter name is too long."))
        ])
    step_size = forms.IntegerField(
        label=_("Step Size"),
        help_text=
        _("Number of users that message will be sent to before forum refreshes page displaying sending progress."
          ),
        initial=300,
        min_value=1)
    content_html = forms.CharField(
        label=_("HTML Message"),
        help_text=_(
            "HTML message visible to members who can read HTML e-mails."),
        widget=forms.Textarea)
    content_plain = forms.CharField(
        label=_("Plain Text Message"),
        help_text=
        _("Alternative plain text message that will be visible to members that can't or dont want to read HTML e-mails."
          ),
        widget=forms.Textarea)
    ignore_subscriptions = forms.BooleanField(
        label=_("Ignore members preferences"),
        help_text=
        _("Change this option to yes if you want to send this newsletter to members that don't want to receive newsletters. This is good for emergencies."
          ),
        widget=YesNoSwitch,
        required=False)
    ranks = forms.ModelMultipleChoiceField(
        label=_("Limit to roles"),
        help_text=
        _("You can limit this newsletter only to members who have specific ranks. If you dont set any ranks, this newsletter will be sent to every user."
          ),
        widget=forms.CheckboxSelectMultiple,
        queryset=Rank.objects.order_by('name').all(),
        required=False)
Exemplo n.º 11
0
class SearchNewslettersForm(Form):
    name = forms.CharField(label=_("Newsletter Name"),
                           max_length=255,
                           required=False)
    contains = forms.CharField(label=_("Message Contents"),
                               max_length=255,
                               required=False)
    type = forms.TypedMultipleChoiceField(label=_("Newsletter Type"),
                                          widget=forms.CheckboxSelectMultiple,
                                          choices=((0,
                                                    _("Only to subscribers")),
                                                   (1, _("To every member"))),
                                          coerce=int,
                                          required=False)
    rank = forms.ModelMultipleChoiceField(
        label=_("Recipient Rank"),
        widget=forms.CheckboxSelectMultiple,
        queryset=Rank.objects.order_by('order').all(),
        required=False)
Exemplo n.º 12
0
class TestForm(forms.ModelForm):
    class Meta:
        model = Test
        fields = ('name', 'school_year', 'teachers', 'department',
                  'marking_period', 'courses')

    teachers = AutoCompleteSelectMultipleField('faculty',
                                               required=True,
                                               help_text="")
    students = forms.ModelMultipleChoiceField(
        queryset=Student.objects.filter(inactive=False),
        widget=forms.SelectMultiple(attrs={'class': 'multiselect'}),
        required=False)
    quick_number_questions = forms.IntegerField(max_value=100,
                                                min_value=1,
                                                required=False)
    quick_number_answers = forms.IntegerField(max_value=6,
                                              min_value=2,
                                              required=False)

    def save(self, *args, **kwargs):
        instance = super(TestForm, self).save(*args, **kwargs)
        instance.enroll_students(self.cleaned_data['students'])
        return instance
Exemplo n.º 13
0
 class MultiModelForm(forms.Form):
     mods = forms.ModelMultipleChoiceField(queryset=queryset)
Exemplo n.º 14
0
class RatioForm(forms.Form):
    """
    Form to display bank transaction sums grouped by tags.
    """

    SINGLE_CREDIT = 'single_credit'
    SINGLE_DEBIT = 'single_debit'
    SUM_CREDIT = 'sum_credit'
    SUM_DEBIT = 'sum_debit'
    TYPES = (
        (ugettext_lazy('Sum'), (
            (SUM_DEBIT, ugettext_lazy('Expenses')),
            (SUM_CREDIT, ugettext_lazy('Income')),
        )),
        (ugettext_lazy('Single'), (
            (SINGLE_DEBIT, ugettext_lazy('Expenses')),
            (SINGLE_CREDIT, ugettext_lazy('Income')),
        )),
    )
    type = forms.ChoiceField(choices=TYPES, initial=SUM_DEBIT)

    CHART_DOUGHNUT = 'doughtnut'
    CHART_PIE = 'pie'
    CHART_POLAR = 'polar'
    CHART_TYPES = (
        (CHART_DOUGHNUT, ugettext_lazy('Doughnut')),
        (CHART_PIE, ugettext_lazy('Pie')),
        (CHART_POLAR, ugettext_lazy('Polar area')),
    )
    chart = forms.ChoiceField(
        choices=CHART_TYPES,
        initial=CHART_DOUGHNUT,
        required=False,
    )

    date_start = forms.DateField(
        widget=Datepicker(attrs={
            'placeholder': ugettext_lazy('Date start'),
        }), )
    date_end = forms.DateField(
        widget=Datepicker(attrs={
            'placeholder': ugettext_lazy('Date end'),
        }), )

    reconciled = forms.NullBooleanField(required=False)

    tags = forms.ModelMultipleChoiceField(
        queryset=BankTransactionTag.objects.none(), required=False)

    sum_min = forms.DecimalField(
        max_digits=10,
        decimal_places=2,
        localize=True,
        required=False,
        widget=forms.NumberInput(attrs={
            'placeholder': _('Minimum sum'),
        }),
    )
    sum_max = forms.DecimalField(
        max_digits=10,
        decimal_places=2,
        localize=True,
        required=False,
        widget=forms.NumberInput(attrs={
            'placeholder': _('Maximum sum'),
        }),
    )

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

        self.fields['tags'].queryset = (
            BankTransactionTag.objects.get_user_tags_queryset(user))
        self.fields['reconciled'].widget.choices[0] = ('1', _('Reconciled?'))

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

        date_start = cleaned_data.get('date_start')
        date_end = cleaned_data.get('date_end')
        if date_start and date_end and date_start > date_end:
            raise forms.ValidationError(
                _("Date start could not be greater than date end."),
                code='date_start_greater',
            )

        sum_min = cleaned_data.get('sum_min', None)
        sum_max = cleaned_data.get('sum_max', None)
        if sum_min is not None and sum_max is not None and sum_min > sum_max:
            raise forms.ValidationError(
                _("Minimum sum could not be greater than maximum sum."),
                code='sum_min_greater',
            )

        return cleaned_data
Exemplo n.º 15
0
class TrekForm(BaseTrekForm):
    children_trek = forms.ModelMultipleChoiceField(label=_(u"Children"),
                                                   queryset=Trek.objects.all(), required=False,
                                                   help_text=_(u"Select children in order"))
    hidden_ordered_children = forms.CharField(label=_(u"Hidden ordered children"),
                                              widget=forms.widgets.HiddenInput(),
                                              required=False)

    leftpanel_scrollable = False

    base_fieldslayout = [
        Div(
            HTML("""
            <ul class="nav nav-tabs">
                <li id="tab-main" class="active"><a href="#main" data-toggle="tab"><i class="icon-certificate"></i> %s</a></li>
                <li id="tab-advanced"><a href="#advanced" data-toggle="tab"><i class="icon-tasks"></i> %s</a></li>
            </ul>""" % (unicode(_("Main")), unicode(_("Advanced")))),
            Div(
                Div(
                    'name',
                    'review',
                    'published',
                    'is_park_centered',
                    'departure',
                    'arrival',
                    'duration',
                    'difficulty',
                    'route',
                    'ambiance',
                    'access',
                    'description_teaser',
                    'description',
                    css_id="main",
                    css_class="scrollable tab-pane active"
                ),
                Div(
                    'points_reference',
                    'disabled_infrastructure',
                    'advised_parking',
                    'parking_location',
                    'public_transport',
                    'advice',
                    'themes',
                    'networks',
                    'practice',
                    'accessibilities',
                    'web_links',
                    'information_desks',
                    'source',
                    'portal',
                    'children_trek',
                    'eid',
                    'eid2',
                    'hidden_ordered_children',
                    Fieldset(_("Related treks"),),
                    css_id="advanced",  # used in Javascript for activating tab if error
                    css_class="scrollable tab-pane"
                ),
                css_class="tab-content"
            ),
            css_class="tabbable"
        ),
    ]

    def __init__(self, *args, **kwargs):
        self.fieldslayout = deepcopy(self.base_fieldslayout)
        self.fieldslayout[0][1][0].append(HTML('<div class="controls">' + _('Insert service:') + ''.join(['<a class="servicetype" data-url="{url}" data-name={name}"><img src="{url}"></a>'.format(url=t.pictogram.url, name=t.name) for t in ServiceType.objects.all()]) + '</div>'))

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

        self.fields['web_links'].widget = SelectMultipleWithPop(choices=self.fields['web_links'].choices,
                                                                add_url=WebLink.get_add_url())
        # Make sure (force) that name is required, in default language only
        self.fields['name_%s' % settings.LANGUAGE_CODE].required = True

        if not settings.TREK_POINTS_OF_REFERENCE_ENABLED:
            self.fields.pop('points_reference')
        else:
            # Edit points of reference with custom edition JavaScript class
            self.fields['points_reference'].widget.geometry_field_class = 'PointsReferenceField'

        self.fields['parking_location'].widget.geometry_field_class = 'ParkingLocationField'
        self.fields['duration'].widget.attrs['min'] = '0'

        # Since we use chosen() in trek_form.html, we don't need the default help text
        for f in ['themes', 'networks', 'accessibilities',
                  'web_links', 'information_desks', 'source', 'portal']:
            self.fields[f].help_text = ''

        if self.instance:
            queryset_children = OrderedTrekChild.objects.filter(parent__id=self.instance.pk)\
                                                        .order_by('order')
            # init multiple children field with data
            self.fields['children_trek'].queryset = Trek.objects.existing().exclude(pk=self.instance.pk)
            self.fields['children_trek'].initial = [c.child.pk for c in self.instance.trek_children.all()]

            # init hidden field with children order
            self.fields['hidden_ordered_children'].initial = ",".join(str(x) for x in queryset_children.values_list('child__id', flat=True))

    def clean_children_trek(self):
        """
        Check the trek is not parent and child at the same time
        """
        children = self.cleaned_data['children_trek']
        if children and self.instance and self.instance.trek_parents.exists():
            raise ValidationError(_(u"Cannot add children because this trek is itself a child."))
        for child in children:
            if child.trek_children.exists():
                raise ValidationError(_(u"Cannot use parent trek {name} as a child trek.".format(name=child.name)))
        return children

    def clean_duration(self):
        """For duration, an HTML5 "number" field is used. If the user fills an invalid
        number (like "2H40"), the browser will submit an empty value (!).
        Here we default to 0.0
        """
        duration = self.cleaned_data.get('duration')
        return 0.0 if duration is None else duration

    def save(self, *args, **kwargs):
        """
        Custom form save override - ordered children management
        """
        sid = transaction.savepoint()

        try:
            return_value = super(TrekForm, self).save(self, *args, **kwargs)
            ordering = []

            if self.cleaned_data['hidden_ordered_children']:
                ordering = self.cleaned_data['hidden_ordered_children'].split(',')

            order = 0

            # add and update
            for value in ordering:
                child, created = OrderedTrekChild.objects.get_or_create(parent=self.instance,
                                                                        child=Trek.objects.get(pk=value))
                child.order = order
                child.save()
                order += 1

            # delete
            new_list_children = self.cleaned_data['children_trek'].values_list('pk', flat=True)

            for child_relation in self.instance.trek_children.all():
                # if existant child not in selection, deletion
                if child_relation.child_id not in new_list_children:
                    child_relation.delete()

            transaction.savepoint_commit(sid)
            return return_value

        except Exception as exc:
            transaction.savepoint_rollback(sid)
            raise exc

    class Meta(BaseTrekForm.Meta):
        fields = BaseTrekForm.Meta.fields + \
            ['name', 'review', 'published', 'is_park_centered', 'departure',
             'arrival', 'duration', 'difficulty', 'route', 'ambiance',
             'access', 'description_teaser', 'description', 'points_reference',
             'disabled_infrastructure', 'advised_parking', 'parking_location',
             'public_transport', 'advice', 'themes', 'networks', 'practice',
             'accessibilities', 'web_links', 'information_desks', 'source', 'portal',
             'children_trek', 'eid', 'eid2', 'hidden_ordered_children', 'structure']
Exemplo n.º 16
0
class CohortForm(forms.Form):
    cohorts = forms.ModelMultipleChoiceField(
        queryset=Cohort.objects.all(),
        required=False,
        widget=forms.widgets.SelectMultiple(attrs={'size': '12'}),
    )
Exemplo n.º 17
0
class TimeBasedForm(forms.Form):
    """A generic template for time and school year based forms"""
    this_year = forms.BooleanField(
        required=False,
        initial=True,
        widget=forms.CheckboxInput(
            attrs={'onclick': 'toggle("id_this_year")'}))
    all_years = forms.BooleanField(
        required=False,
        widget=forms.CheckboxInput(
            attrs={'onclick': 'toggle("id_all_years")'}))
    date_begin = forms.DateField(widget=adminwidgets.AdminDateWidget(),
                                 required=False,
                                 validators=settings.DATE_VALIDATORS)
    date_end = forms.DateField(widget=adminwidgets.AdminDateWidget(),
                               required=False,
                               validators=settings.DATE_VALIDATORS)
    # CourseMeet.day_choice is a tuple of tuples; need the first value from each inner tuple for initial
    schedule_days = forms.MultipleChoiceField(
        required=False,
        choices=CourseMeet.day_choice,
        help_text=
        '''On applicable reports, only the selected days will be included.
            Hold down "Control", or "Command" on a Mac, to select more than one.'''
    )
    marking_period = forms.ModelMultipleChoiceField(
        required=False, queryset=MarkingPeriod.objects.all())
    include_deleted = forms.BooleanField(required=False)

    class Media:
        js = ('/static/js/time_actions.js', )

    def clean(self):
        data = self.cleaned_data
        if not data.get("this_year") and not data.get("all_years"):
            if not data.get("date_begin") or not data.get("date_end"):
                if not data.get("marking_period"):
                    raise forms.ValidationError(
                        "You must select this year, all years, specify a date, or select a marking period."
                    )
        return data

    def get_dates(self):
        """ Returns begining and start dates in a tuple
        Pass it form.cleaned_data """
        data = self.cleaned_data
        if data['this_year'] and not data['marking_period']:
            start = SchoolYear.objects.get(active_year=True).start_date
            # if they want a date in the future, let them specify it explicitly
            end = min(date.today(),
                      SchoolYear.objects.get(active_year=True).end_date)
        elif not data['this_year'] and not data['all_years'] and not data[
                'marking_period']:
            start = data['date_begin']
            end = data['date_end']
        elif data['marking_period']:
            start = data['marking_period'].all().order_by(
                'start_date')[0].start_date
            end = data['marking_period'].all().order_by(
                '-end_date')[0].end_date
        else:  # all of time
            start = date(1980, 1, 1)
            end = date(2980, 1, 1)
        return (start, end)
Exemplo n.º 18
0
class MarkingPeriodForm(forms.Form):
    marking_period = forms.ModelMultipleChoiceField(
        queryset=MarkingPeriod.objects.all())
Exemplo n.º 19
0
class StudentGradeReportWriterForm(forms.Form):
    date = forms.DateField(widget=adminwidgets.AdminDateWidget(),
                           initial=date.today,
                           validators=settings.DATE_VALIDATORS)
    template = forms.ModelChoiceField(required=False,
                                      queryset=Template.objects.all())
    upload_template = forms.FileField(
        required=False,
        help_text="You may choose a template or upload one here")
    include_deleted = forms.BooleanField(required=False)
    all_students = forms.BooleanField(
        required=False, widget=forms.CheckboxInput(attrs={'onclick': ''}))
    student = AutoCompleteSelectMultipleField('student', required=False)
    sort_by = forms.ChoiceField(choices=(('last_name', 'Student last name'),
                                         ('year', 'School year'),
                                         ('cohort', 'Primary Cohort')),
                                initial=1)
    filter_year = forms.ModelMultipleChoiceField(
        required=False, queryset=GradeLevel.objects.all())
    filter_cohort = forms.ModelMultipleChoiceField(
        required=False, queryset=Cohort.objects.all())
    omit_substitutions = forms.BooleanField(
        required=False
    )  # benchmark_grade only; displayed conditionally in template

    def clean(self):
        data = super(StudentGradeReportWriterForm, self).clean()
        if not data.get('student') and not data.get('all_students'):
            raise forms.ValidationError(
                "You must either check \"all students\" or select a student")
        if not data.get('template') and not data.get('upload_template'):
            raise forms.ValidationError(
                "You must either select a template or upload one.")
        return data

    def get_students(self, options, worker=False):
        """ Returns all students based on criteria. data should be form.cleaned_data """
        if worker:
            from ecwsp.work_study.models import StudentWorker
            students = StudentWorker.objects.all()
        else:
            students = Student.objects.all()

        # if selecting individual students, don't filter out deleted
        # why? Because it's unintuitive to pick one student, forgot about "include
        # deleted" and hit go to recieve a blank sheet.
        if not options['all_students']:
            students = students.filter(id__in=options['student'])
        elif not options['include_deleted']:
            students = students.filter(is_active=True)

        if options['student'].count == 1:
            data['student'] = options['student'][0]

        if options['sort_by'] == "year":
            students = students.order_by('year', 'last_name', 'first_name')
        elif options['sort_by'] == "hoomroom":
            pass

        if options['filter_year']:
            students = students.filter(year__in=options['filter_year'])

        if options['filter_cohort']:
            students = students.filter(cohorts__in=options['filter_cohort'])

        return students
Exemplo n.º 20
0
class StudentSelectForm(TimeBasedForm):
    """ Generic student selection form."""
    all_students = forms.BooleanField(
        required=False, widget=forms.CheckboxInput(attrs={'onclick': ''}))
    student = AutoCompleteSelectMultipleField('student', required=False)
    sort_by = forms.ChoiceField(choices=(('last_name', 'Student last name'),
                                         ('year', 'School year'),
                                         ('cohort', 'Primary Cohort')),
                                initial=1)
    filter_year = forms.ModelMultipleChoiceField(
        required=False, queryset=GradeLevel.objects.all())
    filter_cohort = forms.ModelMultipleChoiceField(
        required=False, queryset=Cohort.objects.all())

    def get_template(self, request):
        if self.cleaned_data['template']:
            # use selected template
            template = self.cleaned_data['template']
            if template.file:
                return template.file.path
            else:
                messages.error(request, 'Template not found')
        else:
            # or use uploaded template, saving it to temp file
            template = request.FILES['upload_template']
            tmpfile = mkstemp()[1]
            f = open(tmpfile, 'wb')
            f.write(template.read())
            f.close()
            return tmpfile

    def get_students(self, options, worker=False):
        """ Returns all students based on criteria. data should be form.cleaned_data """
        if worker:
            from ecwsp.work_study.models import StudentWorker
            students = StudentWorker.objects.all()
        else:
            students = Student.objects.all()

        # if selecting individual students, don't filter out deleted
        # why? Because it's unintuitive to pick one student, forgot about "include
        # deleted" and hit go to recieve a blank sheet.
        if not options['all_students']:
            students = students.filter(id__in=options['student'])
        elif not options['include_deleted']:
            students = students.filter(is_active=True)

        if options['student'].count == 1:
            data['student'] = options['student'][0]

        if options['sort_by'] == "year":
            students = students.order_by('year', 'last_name', 'first_name')
        elif options['sort_by'] == "cohort":
            students = students.order_by('cache_cohort', 'last_name',
                                         'first_name')

        if options['filter_year']:
            students = students.filter(year__in=options['filter_year'])

        if options['filter_cohort']:
            students = students.filter(cohorts__in=options['filter_cohort'])

        return students
Exemplo n.º 21
0
 class MultiModelForm(forms.Form):
     mods = forms.ModelMultipleChoiceField(
         queryset=SomeModel.objects.all())