Ejemplo n.º 1
0
    def __init__(self, *args, **kwargs):
        arg = kwargs.pop('request', None)
        super(ExternalTeacherForm, self).__init__(*args, **kwargs)
        session = arg.session
        deps = session['departments']
        choices = [(d['acronym'], d['acronym']) for d in deps]
        self.fields['department'].widget = Select(choices=choices)

        # Labels internationalization
        self.fields['ist_id'].label = _('IST ID')
        self.fields['name'].label = _('name')
        self.fields['semester'].label = _('semester')
        self.fields['hours_per_week'].label = _('hours_per_week')
        self.fields['department'].label = _('department')
        self.fields['degree'].label = _('degree')
        self.fields['course'].label = _('course')
        self.fields['course_manager'].label = _('course_manager')
        self.fields['costs_center'].label = _('costs_center')
        self.fields['notes'].label = _('notes')

        instance = kwargs.pop('instance', None)
        if instance:
            semester_initial = instance.id
        else:
            semester_initial = Semester.get_or_create_current().id

        semester_choices = [(s.id, s.get_display()) for s in Semester.get_current_and_future()]
        
        self.fields['semester'].initial = semester_initial
        self.fields['semester'].widget = Select(choices=semester_choices)
Ejemplo n.º 2
0
    def get_semester_key(self, semester, campus_keys):
        """
        Get (or create) the campus key based on which is available

        :param semester: The semester used to generate the key
        :param campus_keys: The campus to save in the database
        """
        logging.info("Saving/updating semester %s", semester.name)
        db_key = self.generate_semester_key(semester)
        modified = False
        logging.debug("Getting (or even inserting) semester from the database")
        semester_model = semesters.get_semester(db_key)
        if semester_model is None:
            semester_model = Semester(
                key=ndb.Key(Semester, db_key),
                name=semester.name,
                campi=[]
            )
        """ :type: app.models.Semester """
        if sorted(map(ndb.Key.id, semester_model.campi)) != sorted(map(ndb.Key.id, campus_keys)):
            modified = True
            logging.debug("Detected changed list of campus....")
            semester_model.campi = campus_keys
            logging.warning("Saving to NDB (saving semester '%s')", semester.name)
            yield semester_model.put_async(options=context_options)
            semesters.get_semester(db_key, overwrite=True, update_with=semester_model)
        raise ndb.Return({
            "modified": modified,
            "key": semester_model.key,
            "model": semester_model
        })
Ejemplo n.º 3
0
    def __init__(self, *args, **kwargs):
        arg = kwargs.pop('request', None)
        super(ExternalTeacherForm, self).__init__(*args, **kwargs)
        session = arg.session
        deps = session['departments']
        choices = [(d['acronym'], d['acronym']) for d in deps]
        self.fields['department'].widget = Select(choices=choices)

        # Labels internationalization
        self.fields['ist_id'].label = _('IST ID')
        self.fields['name'].label = _('name')
        self.fields['semester'].label = _('semester')
        self.fields['hours_per_week'].label = _('hours_per_week')
        self.fields['department'].label = _('department')
        self.fields['degree'].label = _('degree')
        self.fields['course'].label = _('course')
        self.fields['course_manager'].label = _('course_manager')
        self.fields['costs_center'].label = _('costs_center')
        self.fields['notes'].label = _('notes')

        instance = kwargs.pop('instance', None)
        if instance:
            semester_initial = instance.id
        else:
            semester_initial = Semester.get_or_create_current().id

        semester_choices = [(s.id, s.get_display())
                            for s in Semester.get_current_and_future()]

        self.fields['semester'].initial = semester_initial
        self.fields['semester'].widget = Select(choices=semester_choices)
Ejemplo n.º 4
0
def add_exam(lessonid):
    """Route to either display the form to upload exams or create a new Exam object

    **NOTE: THIS DOES NOT ACTUALLY UPLOAD THE FILE. THAT IS DONE VIA AJAX**"""
    form = AddExamForm()
    try:
        lesson = Lesson.get(Lesson.id == lessonid)
    except:
        flash('Id not found', 'error')
        return redirect(url_for('auth_bp.profile'))
    if form.validate_on_submit():
        Exam.create(average_grade=-1,
                    filename=form.filename.data,
                    s3_filename=form.file_hash.data,
                    lesson=lesson.id,
                    publisher=g.user.user_id,
                    number_of_takers=-1,
                    year=datetime.now().year,
                    semester=Semester.current_semester().value,
                    description=form.description.data)
        g.user.karma_points += KarmaPoints.upload_exam.value
        g.user.save()

        return redirect(url_for(".view", lessonid=lesson.id))

    return render_template("exams/add-exam.html", form=form)
Ejemplo n.º 5
0
def add_note(lessonid):
    """Route to render AddNoteForm or process AddNoteForm to create a Note

    **NOTE: This does not actually upload the file to S3. That is done via AJAX.**

    """
    form = AddNoteForm()
    if form.validate_on_submit():
        # TODO: Add error handling
        filename = form.filename.data
        month = datetime.now().month
        semester = Semester.current_semester()
        print(form.file.data)
        note = Note.create(filename=filename,
                           s3_filename=form.file_hash.data,
                           uploader=g.user.user_id,
                           description=form.description.data,
                           lesson=lessonid,
                           semester=semester.value,
                           year=datetime.now().year,
                           original_filename=form.file.data.filename)
        g.user.karma_points += KarmaPoints.upload_note.value
        g.user.save()

        return redirect(url_for(".view", lessonid=lessonid))
    return render_template('notes/add_note.html', form=form)
Ejemplo n.º 6
0
def create_event():
    """ Event create view """
    form = CreateEventForm(request.form)
    if request.method == 'POST' and form.validate():
        try:
            format_string = '%Y-%m-%dT%H:%M'
            name = str(request.form['name'])
            year = int(request.form['year'])
            semester = Semester(int(request.form['semester']))
            specialslot = int(request.form['special_slots'])
            specialslotname = str(request.form['special_slots_name'])
            specialslotdescription = str(
                request.form['special_slots_description'])
            timestamp = datetime.now()
            opensignuptimestamp = datetime.strptime(
                str(request.form['open_signup_timestamp']), format_string)
            closesignuptimestamp = datetime.strptime(
                str(request.form['close_signup_timestamp']), format_string)
            place = str(request.form['place'])
            participationfee = str(request.form['participation_fee'])
            signup_open = False
            active = False

        except Exception as e:
            print(e)
            return render_template('error.html',
                                   message=str(
                                       request.form['opensignuptimestamp']))

        try:
            event = Events(name=name,
                           year=year,
                           special_slots=specialslot,
                           special_slots_name=specialslotname,
                           special_slots_description=specialslotdescription,
                           place=place,
                           semester=semester,
                           creation_timestamp=timestamp,
                           signup_open=signup_open,
                           active=active,
                           participation_fee=participationfee,
                           open_signup_timestamp=opensignuptimestamp,
                           close_signup_timestamp=closesignuptimestamp)
            db.session.add(event)
            db.session.commit()
        except Exception as e:
            print(e)
            return render_template('error.html')
        return redirect(url_for('admin'))
    return render_template('create_event.html', form=form)
Ejemplo n.º 7
0
def updatetable():

    semester_obj = Semester.query.filter_by(semester_no=request.form['semester']).first() 
    if semester_obj:
        subject = Subject(subjectname=request.form['subject'], teachername=request.form['teacher'], day=request.form['day'],
                room=request.form['room'], timing=request.form['timing'], semester_name=semester_obj)
        db.session.add(subject)
        db.session.commit()
    else:
        semester_obj = Semester(semester_no=request.form['semester']) 
        subject = Subject(subjectname=request.form['subject'], teachername=request.form['teacher'], day=request.form['day'],
                room=request.form['room'], timing=request.form['timing'], semester_name=semester_obj)
        db.session.add(subject)
        db.session.commit()
    return ""
Ejemplo n.º 8
0
 def attend(cls, user_id, lesson_ids):
     """Class method to create LessonStudent objects for every lesson a user wants to attend"""
     users_school = User.get(User.user_id == user_id).school_id
     for lesson_id in lesson_ids:
         lesson = Lesson.get(Lesson.id == lesson_id)
         if lesson.school_id != users_school:
             raise ValueError(
                 "Lesson id {} does not corrospond to the same school as the user"
                 .format(lesson.school_id))
     for lesson_id in lesson_ids:
         semester = Semester.current_semester()
         LessonStudent.create(student_id=user_id,
                              lesson_id=lesson_id,
                              semester=semester.value,
                              year=datetime.now().year)
Ejemplo n.º 9
0
def semester_create():
    form = SemesterFormCreate()
    if form.validate_on_submit():
        semester = Semester(
            name=form.name.data, 
            display_name=form.display_name.data, 
            semester=form.semester.data,
            # is_closed=form.is_closed.data,
            annual_id=form.annual_id.data
            # latest_update
        )
        db.session.add(semester)
        db.session.commit()
        flash('Created and Saved Successfully.', 'alert-success')
        return redirect(url_for('semester_view', id=semester.id))
    return render_template('basic-forms/semester/create.html', title='Semester Create', form=form)
Ejemplo n.º 10
0
def add_semester(user_id):
    body = request.get_json()

    # find user
    real_user = db.session.query(User).get(user_id)

    # see if user exists
    if real_user: # user found, create new semester
        newSemester = Semester(
            userID = user_id,
            semesterName = body['semester_name']
        )
        db.session.add(newSemester)
        db.session.commit()
        return jsonify()

    # user not found
    return jsonify(msg = "user not found"), HTTPStatus.BAD_REQUEST
Ejemplo n.º 11
0
def edit_event(event_id):
    """ Admin edit event, allows to do changes
        on an already created event """
    event = Events.query.get_or_404(event_id)
    form = CreateEventForm(request.form, obj=event)
    form.special_slots.data = str(int(event.special_slots))
    form.semester.data = str(event.semester.value)
    if request.method == 'POST' and form.validate():
        try:
            form.populate_obj(event)
            semester = Semester(int(request.form['semester']))
            event.special_slots = int(request.form['special_slots'])
            event.semester = semester
            db.session.commit()
        except Exception as e:
            print('Exception of type {} occurred: {}'.format(type(e), str(e)))
            return render_template('error.html')
        return redirect(request.referrer)
    return render_template('edit_event.html', form=form, event=event)
Ejemplo n.º 12
0
def duplicate_semester(semester):
    # new_name = semester.name + ' - ' + datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S'), 
    new_name = semester.name
    # remove (***) from name

    new_semester = Semester(
        name = new_name, 
        display_name = semester.display_name,
        semester = semester.semester,
        latest_update = datetime.utcnow(),
        annual_id = semester.annual_id
    )
    db.session.add(new_semester)
    db.session.commit()

    # add children
    msg_units = ''
    for unit in semester.units:
        msg_units = msg_units +  duplicate_unit(unit, new_semester) + ' - '

    msg = ' S: ' + str(new_semester.id) + ' (' + msg_units + ' ) '
    return [new_semester, msg]
Ejemplo n.º 13
0
# Script to create the semesters

from app.models import Semester

# Create more N semesters
N = 20

semester = Semester.get_or_create_current()
new_semester = semester

for i in range(0, N):
  new_semester = new_semester.get_or_create_next()
  print('Created new semester ' + new_semester.get_display())
Ejemplo n.º 14
0
def get_context_for_list(external_teachers, view):
  context = constants.POSSIBLE_ACTIONS[view]
  context['external_teachers'] = external_teachers
  context['current_semester'] = Semester.get_or_create_current()
  context['semesters'] = Semester.objects.all()
  return context
Ejemplo n.º 15
0
def save_semester_by_kurs(kurs_name):
    jwt_claims = get_jwt_claims()
    if jwt_claims['role'] != 'admin':
        return jsonify({"msg": "Permission denied"}), 403

    kurs = Kurs.query.filter_by(name=kurs_name).first()
    if kurs is None:
        return jsonify({"msg":
                        'The kurs ' + kurs_name + ' does not exist'}), 404

    if len(kurs.semester) > 6:
        return jsonify({
            "msg":
            'The kurs ' + kurs_name +
            ' has reached the maximum amount of semester (6)'
        }), 404

    for obj in request.json.get("semesters", []):
        semesterID = obj.get("semesterID", None)
        start = obj.get("start")
        start = date.fromtimestamp(start)
        ende = obj.get("ende")
        ende = date.fromtimestamp(ende)
        id = obj.get("id", None)
        existingSemester = Semester.query.filter(
            and_(Semester.semesterID == semesterID,
                 Semester.kurs_name == kurs.name)).first()
        if existingSemester is not None and existingSemester.id != id:
            return jsonify({
                "msg":
                'A Semester with the given semesterID already exists for the given kurs'
            }), 400

        # If id is given update already existing row in database otherwise its a new semester
        if id is not None:
            semester = Semester.query.filter(Semester.id == id)
            if semester is None:
                return jsonify(
                    {"msg":
                     'Semester with id ' + id + ' does not exist yet'}), 400
            semester.update({
                "semesterID": semesterID,
                "kurs_name": kurs_name,
                "start": start,
                "ende": ende
            })
        else:
            semester = Semester(semesterID=semesterID,
                                kurs_name=kurs_name,
                                start=start,
                                ende=ende)
            db.session.add(semester)

    db.session.commit()

    semesters_out = []
    semesters = Semester.query.filter(Semester.kurs_name == kurs.name).all()
    for semester in semesters:
        semesters_out.append(semester.to_public())

    return jsonify({"msg": "Semesters saved", "semesters": semesters_out}), 201
Ejemplo n.º 16
0
def get_context_for_list(external_teachers, view):
    context = constants.POSSIBLE_ACTIONS[view]
    context['external_teachers'] = external_teachers
    context['current_semester'] = Semester.get_or_create_current()
    context['semesters'] = Semester.objects.all()
    return context