Exemplo n.º 1
0
class AssessmentForm(forms.Form):
    assessment_id = forms.CharField(required=False)
    begindate = forms.DateField(
        required=True,
        input_formats=[
            '%Y-%m-%d',
        ],
        error_messages={'invalid': u'请输入正确格式的日期(年-月-日)'})
    enddate = forms.DateField(required=True,
                              input_formats=[
                                  '%Y-%m-%d',
                              ],
                              error_messages={'invalid': u'请输入正确格式的日期(年-月-日)'})
    term = TermField(required=True)
    excellent = forms.IntegerField(required=True,
                                   max_value=100,
                                   min_value=0,
                                   error_messages={
                                       'invalid': u'必须为数字',
                                       'max_value': u'最大为100',
                                       'min_value': u'最小为0'
                                   })
    good = forms.IntegerField(required=True,
                              max_value=100,
                              min_value=0,
                              error_messages={
                                  'invalid': u'必须为数字',
                                  'max_value': u'最大为100',
                                  'min_value': u'最小为0'
                              })
    ordinary = forms.IntegerField(required=True,
                                  max_value=100,
                                  min_value=0,
                                  error_messages={
                                      'invalid': u'必须为数字',
                                      'max_value': u'最大为100',
                                      'min_value': u'最小为0'
                                  })

    def clean_assessment_id(self):
        if self.get_id():
            try:
                Assessment.objects.get(id=self.get_id())
            except Assessment.DoesNotExist:
                raise forms.ValidationError(u'非法数据')
        return self.get_id()

    def clean_term(self):
        if not self.get_id():
            try:
                Assessment.objects.get(term=self.cleaned_data['term'])
            except Assessment.DoesNotExist:
                return self.cleaned_data['term']
            raise forms.ValidationError(u'改学期已经存在')
        else:
            try:
                assessment = Assessment.objects.get(id=self.get_id())
                try:
                    oterm = assessment.term
                    Assessment.objects.exclude(term=oterm).get(
                        term=self.cleaned_data['term'])
                    raise forms.ValidationError(u'该学期已经存在')
                except Assessment.DoesNotExist:
                    return self.cleaned_data['term']
            except Assessment.DoesNotExist:
                raise forms.ValidationError(u'非法数据')
        #return self.cleaned_data['term']

    def clean_enddate(self):
        if self.cleaned_data['enddate'] < self.cleaned_data['begindate']:
            raise forms.ValidationError(u'开始日期必须小于结束日期')
        return self.cleaned_data['enddate']

    def clean_ordinary(self):
        if self.cleaned_data['excellent'] + self.cleaned_data[
                'good'] + self.cleaned_data['ordinary'] != 100:
            raise forms.ValidationError(u'优良中比例和必须为100')
        return self.cleaned_data['ordinary']

    def get_id(self):
        return self.cleaned_data['assessment_id']

    def save(self, commit=True):
        newassessment = Assessment(begindate=self.cleaned_data['begindate'],
                                   enddate=self.cleaned_data['enddate'],
                                   term=self.cleaned_data['term'],
                                   excellent=self.cleaned_data['excellent'],
                                   good=self.cleaned_data['good'],
                                   ordinary=self.cleaned_data['ordinary'])
        if commit:
            newassessment.save()
        #产生行评价记录,后续考虑性能优化
        for i in Class.objects.all():
            for student in i.student_set.all():
                newassessmentRow = AssessmentRow(assessment=newassessment,
                                                 student=student,
                                                 excellent=0,
                                                 good=0,
                                                 ordinary=0)
                newassessmentRow.save()
        return newassessment

    def update(self):
        assessment = Assessment.objects.get(id=self.get_id())
        assessment.begindate = self.cleaned_data['begindate']
        assessment.enddate = self.cleaned_data['enddate']
        assessment.term = self.cleaned_data['term']
        assessment.excellent = self.cleaned_data['excellent']
        assessment.good = self.cleaned_data['good']
        assessment.ordinary = self.cleaned_data['ordinary']
        assessment.save()
Exemplo n.º 2
0
class Comperformance_SetupForm(forms.Form):
    comperformance_setup_id = forms.CharField(required=False)
    term = TermField(required=True)
    moral = forms.FloatField(required=True,
                             max_value=100,
                             min_value=0,
                             error_messages={
                                 'invalid': u'互评最高分为数字',
                                 'max_value': u'互评最高分最大为100',
                                 'min_value': u'互评最高分最小为0',
                             })
    behaviorup = forms.FloatField(required=True,
                                  max_value=100,
                                  min_value=0,
                                  error_messages={
                                      'invalid': u'日常行为最高分为数字',
                                      'max_value': u'日常行为最高分最大为100',
                                      'min_value': u'日常行为最高分最小为0',
                                  })
    physical = forms.FloatField(required=True,
                                max_value=100,
                                min_value=0,
                                error_messages={
                                    'invalid': u'体能分为数字',
                                    'max_value': u'体能分最大为100',
                                    'min_value': u'体能分最小为0',
                                })
    excellent = forms.FloatField(required=True,
                                 max_value=100,
                                 min_value=0,
                                 error_messages={
                                     'invalid': u'优分数为数字',
                                     'max_value': u'优分数最大为100',
                                     'min_value': u'优分数最小为0'
                                 })
    good = forms.FloatField(required=True,
                            max_value=100,
                            min_value=0,
                            error_messages={
                                'invalid': u'良分数为数字',
                                'max_value': u'良分数最大为100',
                                'min_value': u'良分数最小为0'
                            })
    ordinary = forms.FloatField(required=True,
                                max_value=100,
                                min_value=0,
                                error_messages={
                                    'invalid': u'中分数为数字',
                                    'max_value': u'中分数最大为100',
                                    'min_value': u'中分数最小为0'
                                })
    development = forms.FloatField(required=True,
                                   max_value=100,
                                   min_value=0,
                                   error_messages={
                                       'invalid': u'单项最高分为数字',
                                       'max_value': u'单项最高分最大为100',
                                       'min_value': u'单项最高分最小为0'
                                   })
    behavior = forms.FloatField(required=True,
                                max_value=100,
                                min_value=0,
                                error_messages={
                                    'invalid': u'日常行为分基础分为数字',
                                    'max_value': u'日常行为分基础分最大为100',
                                    'min_value': u'日常行为分基础分最小为0'
                                })

    def clean_comperformance_setup_id(self):
        if self.get_id():
            try:
                Comperformance.objects.get(id=self.get_id())
            except Comperformance.DoesNotExist:
                raise forms.ValidationError(u'非法数据')
        return self.get_id()

    def clean_physical(self):
        if self.cleaned_data['moral'] + self.cleaned_data[
                'behaviorup'] + self.cleaned_data['physical'] != 100:
            raise forms.ValidationError(u'互评最高分、日常行为最高分、体能分数之和必须为100')
        return self.cleaned_data['physical']

    def clean_term(self):
        if not self.get_id():
            try:
                Comperformance.objects.get(term=self.cleaned_data['term'])
            except Comperformance.DoesNotExist:
                return self.cleaned_data['term']
            raise forms.ValidationError(u'该学期已经存在')
        else:
            try:
                comperformance = Comperformance.objects.get(id=self.get_id())
                try:
                    oterm = comperformance.term
                    Comperformance.objects.exclude(term=oterm).get(
                        term=self.cleaned_data['term'])
                    raise forms.ValidatorError(u'该学期已经存在')
                except Comperformance.DoesNotExist:
                    return self.cleaned_data['term']
            except Comperformance.DoesNotExist:
                raise forms.ValidationError(u'非法数据')

    def get_id(self):
        return self.cleaned_data['comperformance_setup_id']

    def save(self, commit=True):
        newcomperformance = Comperformance(
            excellent=self.cleaned_data['excellent'],
            good=self.cleaned_data['good'],
            ordinary=self.cleaned_data['ordinary'],
            physical=self.cleaned_data['physical'],
            behavior=self.cleaned_data['physical'],
            development=self.cleaned_data['development'],
            moral=self.cleaned_data['moral'],
            behaviorup=self.cleaned_data['behaviorup'],
            term=self.cleaned_data['term'])
        if commit:
            newcomperformance.save()
        for i in Class.objects.all():
            studentnum = i.student_set.count()
            for student in i.student_set.all():
                try:
                    assessmentrow = AssessmentRow.objects.filter(
                        assessment__term=newcomperformance.term).get(
                            student__id=student.id)
                    assessmentscore = round((assessmentrow.excellent*newcomperformance.excellent + assessmentrow.good*newcomperformance.good + \
                                            assessmentrow.ordinary*newcomperformance.ordinary)/studentnum, 2)
                except AssessmentRow.DoesNotExist, e:
                    assessmentscore = 0
                    traceback.print_stack()
                    traceback.print_exc()
                    print e
                try:
                    grade = Grade.objects.filter(
                        term=newcomperformance.term).get(
                            student__id=student.id)
                    gradescore = grade.score
                except Grade.DoesNotExist, e:
                    gradescore = 0
                    traceback.print_stack()
                    traceback.print_exc()
                    print e
                behavior = newcomperformance.behavior
                comperformancescore = assessmentscore * 0.3 + gradescore * 0.7 + behavior * 0.3
                newcomperformancescore = ComperformanceScore(
                    student=student,
                    comperformance=newcomperformance,
                    score=comperformancescore,
                    assessmentscore=assessmentscore)
                newcomperformancescore.save()
Exemplo n.º 3
0
class AssessmentForm(forms.Form):
    assessment_id = forms.CharField(required=False)
    begindate = forms.DateField(required=True,input_formats=['%Y-%m-%d',],error_messages={'invalid':'请输入正确格式的日期'})
    enddate = forms.DateField(required=True,input_formats=['%Y-%m-%d',],error_messages={'invalid':'请输入正确格式的日期'})
    term = TermField(required=True)
    excellent = forms.IntegerField(required=True,max_value=100,min_value=0,error_messages={
        'invalid':'请输入数字',
        'max_value':'优最大为100',
        'min_value':'优最小为0'})
    good = forms.IntegerField(required=True,max_value=100,min_value=0,error_messages={
        'invalid':'请输入数字',
        'max_value':'良最大为100',
        'min_value':'良最小为0'})
    ordinary = forms.IntegerField(required=True,max_value=100,min_value=0,error_messages={
        'invalid':'请输入数字',
        'max_value':'中最大为100',
        'min_value':'中最小为0'})

    def clean_assessment_id(self):
        if self.get_id():
            try:
                Assessment.objects.get(id = self.get_id())
            except Assessment.DoesNotExist:
                raise forms.ValidationError(u"请不要非法提交数据")
            return self.get_id()
        return self.get_id()
    
    def clean_term(self):
        if not self.get_id():
            try:
                Assessment.objects.get(term = self.cleaned_data['term'])
            except Assessment.DoesNotExist:
                return self.cleaned_data['term']
            raise forms.ValidationError(u"该学期已经存在")
        else:
            try:
                assessment = Assessment.objects.get(id = self.get_id())
                try:
                    oterm = assessment.term
                    Assessment.objects.exclude(term=oterm).get(term=self.cleaned_data['term'])
                    raise forms.ValidationError(u"该学期已经存在")
                except Assessment.DoesNotExist:
                    return self.cleaned_data['term']
            except Assessment.DoesNotExist:
                raise forms.ValidationError(u"请不要非法提交数据")
        return self.cleaned_data['term']
    
    def clean_enddate(self):
        if self.cleaned_data['enddate'] < self.cleaned_data['begindate']:
            raise forms.ValidationError(u"开始日期必须小于结束日期")
        return self.cleaned_data['enddate']
    
    def clean_ordinary(self):
        if self.cleaned_data['excellent'] + self.cleaned_data['good'] + self.cleaned_data['ordinary'] != 100:
            raise forms.ValidationError(u"优良中之和必须为100")
        return self.cleaned_data['ordinary']

    def get_id(self):
        return self.cleaned_data['assessment_id']

    def save(self,commit=True):
        newassessment = Assessment(begindate=self.cleaned_data['begindate'],\
            enddate=self.cleaned_data['enddate'],term=self.cleaned_data['term'],\
            excellent=self.cleaned_data['excellent'],good=self.cleaned_data['good'],\
            ordinary=self.cleaned_data['ordinary'])
        if commit:
            newassessment.save()
        #generate the records
        for i in Class.objects.all():
            for student in i.student_set.all():
                for exstudent in i.student_set.all():
                    newAssessmentRecord = AssessmentRecord(assessment=newassessment,\
                        ostudent=student,dstudent=exstudent,\
                        result='3')#'3'------>'无'
                    newAssessmentRecord.save()
        
        #generate rows
        for i in Class.objects.all():
            for student in i.student_set.all():
                newAssessmentRow = AssessmentRow(assessment=newassessment,student=student,\
                    excellent=0,good=0,ordinary=0)
                newAssessmentRow.save()
        return newassessment

    def update(self):
        assessment = Assessment.objects.get(id = self.get_id())
        assessment.begindate = self.cleaned_data['begindate']
        assessment.enddate = self.cleaned_data['enddate']
        assessment.term = self.cleaned_data['term']
        assessment.excellent = self.cleaned_data['excellent']
        assessment.good = self.cleaned_data['good']
        assessment.ordinary = self.cleaned_data['ordinary']
        assessment.save()