def create_link_subject_file(data_form, certifications, import_errors_create, import_errors_link, subject_create, subject_link): form_subject = SubjectEditForm(data=data_form) if form_subject.is_valid(): subject = SubjectService.create(form_subject) SubjectService.save(subject) subject_create.append(subject) [ subject.titulacion_set.add(certification) for certification in list(certifications) ] else: import_errors_create.append(form_subject.data['name'] + " - " + form_subject.data['code']) subject = SubjectService.find_by_code(form_subject.data['code']) if subject: [ subject.titulacion_set.add(certification) for certification in list(certifications) ] subject_link.append(subject) else: import_errors_link.append(form_subject.data['name'] + " - " + form_subject.data['code'])
def view_profile(request, student_id): template_vars = {} form = None if request.method == 'POST': student = Alumno.objects.get(id=student_id) lecturer_subjects = SubjectService.get_lecturer_subjects(request.user.id) template_vars['lecturer_subjects'] = lecturer_subjects # Save remark from form -> logged user is a lecturer form = RemarkForm(request.POST, lecturer_id=request.user.id) if form.is_valid(): RemarkService.save(form) messages.success(request, _('Remark was saved successfully.')) return HttpResponseRedirect('/profile/view/%s' % form.cleaned_data['student_id']) else: if request.user.has_perm('principal.alumno'): student = Alumno.objects.get(id=request.user.id) else: student = Alumno.objects.get(id=student_id) if request.user.has_perm('principal.profesor'): lecturer_subjects = SubjectService.get_lecturer_subjects(request.user.id) form = RemarkForm(lecturer_id=request.user.id, initial={'student_id': student.id}) template_vars['lecturer_subjects'] = lecturer_subjects template_vars['student'] = student template_vars['form'] = form return render_to_response('profile/details.html', template_vars, context_instance=RequestContext(request))
def lecturer_students(request): if request.method == 'POST': form = LecturerStudentFilterForm(request.POST, lecturer_id=request.user.id) if form.is_valid(): subject = form.cleaned_data['subject'] students = SubjectService.subject_students(subject, request.user.id) else: form = LecturerStudentFilterForm(lecturer_id=request.user.id) students = SubjectService.lecturer_students(request.user.id) return render_to_response('student/list.html', {'students': students, 'form': form}, context_instance=RequestContext(request))
def list_subjects(request): if request.user.has_perm('principal.alumno'): subjects = SubjectService.get_student_subjects(request.user.alumno.id) elif request.user.has_perm('principal.profesor'): # TODO Creo que no llama al metodo correcto (Revisar Carlos) subjects = SubjectService.get_lecturer_subjects(request.user.profesor.id) else: # It's an administrator subjects = SubjectService.find_all().order_by('nombre') template_name = 'subject/list.html' template_data = {"subjects": subjects} return render_to_response(template_name, template_data, context_instance=RequestContext(request))
def news(request, new_id=None, method=None): if request.method == 'POST': assert request.user.has_perm('principal.profesor') form = NewForm(request.POST, lecturer_id=request.user.id) if form.is_valid(): NewService.save(form, request.user.id) messages.add_message(request, messages.SUCCESS, _('Action completed successfully.')) return HttpResponseRedirect('/news') if request.user.has_perm('principal.alumno'): subjects = SubjectService.get_student_subjects(request.user.id) form = None elif request.user.has_perm('principal.profesor'): subjects = SubjectService.get_lecturer_subjects(request.user.id) if method == 'rm': new = get_object_or_404(Noticia, id=new_id) if new.profesor.id == request.user.id: NewService.delete(new_id) messages.success(request, _('New was deleted successfully.')) else: messages.error(request, _('You cannot delete this new.')) return HttpResponseRedirect('/news') elif method == 'ed': new = get_object_or_404(Noticia, id=new_id) if new.profesor.id == request.user.id: initial_data = NewService.build_initial(new_id) form = NewForm(lecturer_id=request.user.id, initial=initial_data) else: messages.error(request, _('You cannot edit this new.')) return HttpResponseRedirect('/news') elif not method: form = NewForm(lecturer_id=request.user.id) else: subjects = Asignatura.objects.all() form = None return render_to_response('new/list.html', { 'subjects': subjects, 'form': form }, context_instance=RequestContext(request))
def link_user_subject(request, subject_id, user_id): subject = SubjectService.find_one(subject_id) assert subject is not None if user_id is None: students = StudentService.find_all() lecturers = LecturerService.fin_all() template_name = 'user/list.html' template_data = { 'students': students, 'lecturers': lecturers, 'subject_id': subject.id } return render_to_response(template_name, template_data, context_instance=RequestContext(request)) else: user = UserService.find_one(user_id) assert user.has_perm('principal.alumno') or user.has_perm( 'principal.profesor') if user.has_perm('principal.alumno'): student = StudentService.find_one(user.id) student.asignaturas.add(subject) else: lecturer = LecturerService.find_one(user.id) if request.POST: form = UserLinkSubjectForm(request.POST) if form.is_valid(): ImpartSubjectService.reconstruct_and_save(form) messages.success(request, _("Action completed successfully")) return HttpResponseRedirect('/subject/details/' + str(subject_id)) else: data = { 'subject_id': subject_id, 'lecturer_id': lecturer.id, 'lecturer': lecturer.first_name + " " + lecturer.last_name } form = UserLinkSubjectForm(initial=data) students = StudentService.find_all() lecturers = LecturerService.fin_all() template_name = 'user/list.html' template_data = { "form": form, 'students': students, 'lecturers': lecturers, 'subject_id': subject_id, 'lecturer_id': lecturer.id } return render_to_response(template_name, template_data, context_instance=RequestContext(request)) messages.success(request, _('User linked to the subject')) return HttpResponseRedirect('/subject/details/' + str(subject_id))
def unlink_certification_subject(request, subject_id, certification_id): subject = SubjectService.find_one(subject_id) certification = CertificationService.find_one(certification_id) subject.titulacion_set.remove(certification) messages.success(request, _('Subject unlinked to the certification')) return HttpResponseRedirect('/admin/certification/details/' + str(certification_id))
def list_subjects(request): if request.user.has_perm('principal.alumno'): subjects = SubjectService.get_student_subjects(request.user.alumno.id) elif request.user.has_perm('principal.profesor'): # TODO Creo que no llama al metodo correcto (Revisar Carlos) subjects = SubjectService.get_lecturer_subjects( request.user.profesor.id) else: # It's an administrator subjects = SubjectService.find_all().order_by('nombre') template_name = 'subject/list.html' template_data = {"subjects": subjects} return render_to_response(template_name, template_data, context_instance=RequestContext(request))
def get_all_json(request): subjects = SubjectService.get_student_subjects(request.user.alumno.id) json = json_lib.dumps([{ 'id': subject.id, 'name': subject.nombre } for subject in subjects]) return JsonResponse(json, safe=False)
def create_subject(request): if request.POST: form = SubjectEditForm(request.POST) if form.is_valid(): subject = SubjectService.create(form) SubjectService.save(subject) messages.success(request, _("Action completed successfully")) return HttpResponseRedirect("/admin/subject/link/" + str(subject.id)) else: data = {} form = SubjectEditForm(initial=data) template_name = 'subject/edit.html' template_data = {"form": form} return render_to_response(template_name, template_data, context_instance=RequestContext(request))
def clean(self): code = self.cleaned_data.get('code') if code is not None: subject = SubjectService.find_by_code(code) if subject is not None: self.add_error('code', _("There cannot be two certifications with the same code")) return self.cleaned_data
def lecturer_students(request): if request.method == 'POST': form = LecturerStudentFilterForm(request.POST, lecturer_id=request.user.id) if form.is_valid(): subject = form.cleaned_data['subject'] students = SubjectService.subject_students(subject, request.user.id) else: form = LecturerStudentFilterForm(lecturer_id=request.user.id) students = SubjectService.lecturer_students(request.user.id) return render_to_response('student/list.html', { 'students': students, 'form': form }, context_instance=RequestContext(request))
def create_link_subject_file(data_form, certifications, import_errors_create, import_errors_link, subject_create, subject_link): form_subject = SubjectEditForm(data=data_form) if form_subject.is_valid(): subject = SubjectService.create(form_subject) SubjectService.save(subject) subject_create.append(subject) [subject.titulacion_set.add(certification) for certification in list(certifications)] else: import_errors_create.append(form_subject.data['name'] + " - " + form_subject.data['code']) subject = SubjectService.find_by_code(form_subject.data['code']) if subject: [subject.titulacion_set.add(certification) for certification in list(certifications)] subject_link.append(subject) else: import_errors_link.append(form_subject.data['name'] + " - " + form_subject.data['code'])
def search(request): if request.POST: search_text = request.POST['search_text'] else: search_text = '' if request.user.has_perm('principal.alumno'): subjects = SubjectService.get_student_subjects_search(request.user.alumno.id, search_text) elif request.user.has_perm('principal.profesor'): # TODO Creo que no llama al metodo correcto (Revisar Carlos) subjects = SubjectService.get_lecturer_subjects_search(request.user.profesor.id, search_text) else: # It's an administrator subjects = SubjectService.search(search_text) template_name = 'subject/ajax_search.html' template_data = {'subjects': subjects} return render_to_response(template_name, template_data, context_instance=RequestContext(request))
def news(request, new_id=None, method=None): if request.method == "POST": assert request.user.has_perm("principal.profesor") form = NewForm(request.POST, lecturer_id=request.user.id) if form.is_valid(): NewService.save(form, request.user.id) messages.add_message(request, messages.SUCCESS, _("Action completed successfully.")) return HttpResponseRedirect("/news") if request.user.has_perm("principal.alumno"): subjects = SubjectService.get_student_subjects(request.user.id) form = None elif request.user.has_perm("principal.profesor"): subjects = SubjectService.get_lecturer_subjects(request.user.id) if method == "rm": new = get_object_or_404(Noticia, id=new_id) if new.profesor.id == request.user.id: NewService.delete(new_id) messages.success(request, _("New was deleted successfully.")) else: messages.error(request, _("You cannot delete this new.")) return HttpResponseRedirect("/news") elif method == "ed": new = get_object_or_404(Noticia, id=new_id) if new.profesor.id == request.user.id: initial_data = NewService.build_initial(new_id) form = NewForm(lecturer_id=request.user.id, initial=initial_data) else: messages.error(request, _("You cannot edit this new.")) return HttpResponseRedirect("/news") elif not method: form = NewForm(lecturer_id=request.user.id) else: subjects = Asignatura.objects.all() form = None return render_to_response( "new/list.html", {"subjects": subjects, "form": form}, context_instance=RequestContext(request) )
def create(request, subject_id): subject = SubjectService.find_one(subject_id) assert subject is not None if request.POST: form = SubjectLinkEditForm(request.POST) if form.is_valid(): subject = SubjectService.edit(form) SubjectService.save(subject) messages.success(request, _("Action completed successfully")) return HttpResponseRedirect("/subject/details/" + str(subject_id)) else: certifications = CertificationService.find_by_subject(subject_id) data = {'id': subject_id, 'certifications': certifications} form = SubjectLinkEditForm(initial=data) template_name = 'subject_link/edit.html' template_data = {"form": form, "id": subject_id} return render_to_response(template_name, template_data, context_instance=RequestContext(request))
def clean(self): code = self.cleaned_data.get('code') if code is not None: subject = SubjectService.find_by_code(code) if subject is not None: self.add_error( 'code', _("There cannot be two certifications with the same code")) return self.cleaned_data
def rollback(user_create, student_link, lecturer_link, subject_id): subject = SubjectService.find_one(subject_id) for student in student_link: student.asignaturas.remove(subject) for lecturer in lecturer_link: lecturer.imparteasignatura_set.all().get(profesor_id=lecturer.id, asignatura_id=subject.id).delete() for user in user_create: delete(user)
def delete_users_subject(request, subject_id): subject = SubjectService.find_one(subject_id) students = subject.alumno_set.all() # Delete students for student in students: student.asignaturas.remove(subject) # Delete relationship with lecturers subject.imparteasignatura_set.all().delete() messages.success(request, _('The users have been removed')) return HttpResponseRedirect('/subject/details/' + str(subject_id))
def search(request): if request.POST: search_text = request.POST['search_text'] else: search_text = '' if request.user.has_perm('principal.alumno'): subjects = SubjectService.get_student_subjects_search( request.user.alumno.id, search_text) elif request.user.has_perm('principal.profesor'): # TODO Creo que no llama al metodo correcto (Revisar Carlos) subjects = SubjectService.get_lecturer_subjects_search( request.user.profesor.id, search_text) else: # It's an administrator subjects = SubjectService.search(search_text) template_name = 'subject/ajax_search.html' template_data = {'subjects': subjects} return render_to_response(template_name, template_data, context_instance=RequestContext(request))
def rollback(user_create, student_link, lecturer_link, subject_id): subject = SubjectService.find_one(subject_id) for student in student_link: student.asignaturas.remove(subject) for lecturer in lecturer_link: lecturer.imparteasignatura_set.all().get( profesor_id=lecturer.id, asignatura_id=subject.id).delete() for user in user_create: delete(user)
def view_profile(request, student_id): template_vars = {} form = None if request.method == 'POST': student = Alumno.objects.get(id=student_id) lecturer_subjects = SubjectService.get_lecturer_subjects( request.user.id) template_vars['lecturer_subjects'] = lecturer_subjects # Save remark from form -> logged user is a lecturer form = RemarkForm(request.POST, lecturer_id=request.user.id) if form.is_valid(): RemarkService.save(form) messages.success(request, _('Remark was saved successfully.')) return HttpResponseRedirect('/profile/view/%s' % form.cleaned_data['student_id']) else: if request.user.has_perm('principal.alumno'): student = Alumno.objects.get(id=request.user.id) else: student = Alumno.objects.get(id=student_id) if request.user.has_perm('principal.profesor'): lecturer_subjects = SubjectService.get_lecturer_subjects( request.user.id) form = RemarkForm(lecturer_id=request.user.id, initial={'student_id': student.id}) template_vars['lecturer_subjects'] = lecturer_subjects template_vars['student'] = student template_vars['form'] = form return render_to_response('profile/details.html', template_vars, context_instance=RequestContext(request))
def unlink_user_subject(request, subject_id, user_id): subject = SubjectService.find_one(subject_id) user = UserService.find_one(user_id) assert not user.has_perm('principal.administrator') if user.has_perm('principal.alumno'): student = StudentService.find_one(user_id) student.asignaturas.remove(subject) else: lecturer = LecturerService.find_one(user_id) lecturer.imparteasignatura_set.all().get(profesor_id=user.id, asignatura_id=subject.id).delete() messages.success(request, _('Subject unlinked to the user')) return HttpResponseRedirect('/admin/user/details/' + str(user.id))
def unlink_user_subject(request, subject_id, user_id): subject = SubjectService.find_one(subject_id) user = UserService.find_one(user_id) assert not user.has_perm('principal.administrator') if user.has_perm('principal.alumno'): student = StudentService.find_one(user_id) student.asignaturas.remove(subject) else: lecturer = LecturerService.find_one(user_id) lecturer.imparteasignatura_set.all().get( profesor_id=user.id, asignatura_id=subject.id).delete() messages.success(request, _('Subject unlinked to the user')) return HttpResponseRedirect('/admin/user/details/' + str(user.id))
def reconstruct_and_save(form): lecturer_id = form.cleaned_data['lecturer_id'] subject_id = form.cleaned_data['subject_id'] lecturer = LecturerService.find_one(lecturer_id) subject = SubjectService.find_one(subject_id) position = form.cleaned_data['position'] impart_subject = Imparteasignatura.objects.create( cargo=position, asignatura=subject, profesor=lecturer ) return impart_subject
def link_user_subject(request, subject_id, user_id): subject = SubjectService.find_one(subject_id) assert subject is not None if user_id is None: students = StudentService.find_all() lecturers = LecturerService.fin_all() template_name = 'user/list.html' template_data = {'students': students, 'lecturers': lecturers, 'subject_id': subject.id} return render_to_response(template_name, template_data, context_instance=RequestContext(request)) else: user = UserService.find_one(user_id) assert user.has_perm('principal.alumno') or user.has_perm('principal.profesor') if user.has_perm('principal.alumno'): student = StudentService.find_one(user.id) student.asignaturas.add(subject) else: lecturer = LecturerService.find_one(user.id) if request.POST: form = UserLinkSubjectForm(request.POST) if form.is_valid(): ImpartSubjectService.reconstruct_and_save(form) messages.success(request, _("Action completed successfully")) return HttpResponseRedirect('/subject/details/' + str(subject_id)) else: data = {'subject_id': subject_id, 'lecturer_id': lecturer.id, 'lecturer': lecturer.first_name + " " + lecturer.last_name} form = UserLinkSubjectForm(initial=data) students = StudentService.find_all() lecturers = LecturerService.fin_all() template_name = 'user/list.html' template_data = {"form": form, 'students': students, 'lecturers': lecturers, 'subject_id': subject_id, 'lecturer_id': lecturer.id} return render_to_response(template_name, template_data, context_instance=RequestContext(request)) messages.success(request, _('User linked to the subject')) return HttpResponseRedirect('/subject/details/' + str(subject_id))
def __init__(self, *args, **kwargs): lecturer_id = kwargs.pop('lecturer_id') super(LecturerStudentFilterForm, self).__init__(*args, **kwargs) self.fields['subject'].queryset = SubjectService.get_lecturer_subjects(lecturer_id)
def delete_subject(request, subject_id): subject = SubjectService.find_one(subject_id) title = subject.nombre subject.delete() messages.success(request, _('The subject ' + title + ' has been removed')) return HttpResponseRedirect('/subject/list')
def __init__(self, *args, **kwargs): lecturer_id = kwargs.pop('lecturer_id') super(RemarkForm, self).__init__(*args, **kwargs) self.fields['lecturer_id'].initial = lecturer_id self.fields['subject'].queryset = SubjectService.get_lecturer_subjects( lecturer_id)
def import_subject(request): template_data = {} import_errors_create = [] import_errors_link = [] subject_create = [] subject_link = [] if request.POST: form = FileUploadSubjectForm(request.POST, request.FILES) if form.is_valid(): file_name = form.cleaned_data['file_upload'] certifications = set(form.cleaned_data['certifications']) data = file_name.read() file_name.close() try: if form.cleaned_data['file_upload'].content_type == "text/xml": # File XML data = xmltodict.parse(data) if data['asignaturas']: if not isinstance(data['asignaturas']['asignatura'], list): # 1 value subject = data['asignaturas']['asignatura'] data_form = SubjectService.get_form_data_xml( subject) create_link_subject_file(data_form, certifications, import_errors_create, import_errors_link, subject_create, subject_link) else: for subject_data in data['asignaturas'][ 'asignatura']: data_form = SubjectService.get_form_data_xml( subject_data) create_link_subject_file( data_form, certifications, import_errors_create, import_errors_link, subject_create, subject_link) else: # File CSV for subject in csv.reader(data.splitlines()): data_form = SubjectService.get_form_data_csv(subject) create_link_subject_file(data_form, certifications, import_errors_create, import_errors_link, subject_create, subject_link) if not import_errors_create and not import_errors_link: message = _('Action completed successfully') messages.success(request, message) else: if import_errors_create: template_data[ 'import_errors_create'] = import_errors_create if import_errors_link: template_data[ 'import_errors_link'] = import_errors_link if import_errors_create or import_errors_link: message = _('Action completed successfully') messages.warning(request, message) form = FileUploadSubjectForm() except KeyError as e: message = _( "The file structure is wrong. It needs a label called: " + e.message) form.add_error('file_upload', message) SubjectService.rollback(subject_create, subject_link, certifications) except AttributeError: message = _("Please, check the attributes of the subjects") form.add_error('file_upload', message) SubjectService.rollback(subject_create, subject_link, certifications) except TypeError: message = _("Please, check the xml syntax and data values") form.add_error('file_upload', message) SubjectService.rollback(subject_create, subject_link, certifications) except Exception: message = _("Please, check the file") form.add_error('file_upload', message) SubjectService.rollback(subject_create, subject_link, certifications) else: form = FileUploadSubjectForm() template_data['form'] = form template_name = 'subject/import_subject.html' return render_to_response(template_name, template_data, context_instance=RequestContext(request))
def get_all_json(request): subjects = SubjectService.get_student_subjects(request.user.alumno.id) json = json_lib.dumps([{'id': subject.id, 'name': subject.nombre} for subject in subjects]) return JsonResponse(json, safe=False)
def __init__(self, *args, **kwargs): lecturer_id = kwargs.pop('lecturer_id') super(RemarkForm, self).__init__(*args, **kwargs) self.fields['lecturer_id'].initial = lecturer_id self.fields['subject'].queryset = SubjectService.get_lecturer_subjects(lecturer_id)
def import_subject(request): template_data = {} import_errors_create = [] import_errors_link = [] subject_create = [] subject_link = [] if request.POST: form = FileUploadSubjectForm(request.POST, request.FILES) if form.is_valid(): file_name = form.cleaned_data['file_upload'] certifications = set(form.cleaned_data['certifications']) data = file_name.read() file_name.close() try: if form.cleaned_data['file_upload'].content_type == "text/xml": # File XML data = xmltodict.parse(data) if data['asignaturas']: if not isinstance(data['asignaturas']['asignatura'], list): # 1 value subject = data['asignaturas']['asignatura'] data_form = SubjectService.get_form_data_xml(subject) create_link_subject_file(data_form, certifications, import_errors_create, import_errors_link, subject_create, subject_link) else: for subject_data in data['asignaturas']['asignatura']: data_form = SubjectService.get_form_data_xml(subject_data) create_link_subject_file(data_form, certifications, import_errors_create, import_errors_link, subject_create, subject_link) else: # File CSV for subject in csv.reader(data.splitlines()): data_form = SubjectService.get_form_data_csv(subject) create_link_subject_file(data_form, certifications, import_errors_create, import_errors_link, subject_create, subject_link) if not import_errors_create and not import_errors_link: message = _('Action completed successfully') messages.success(request, message) else: if import_errors_create: template_data['import_errors_create'] = import_errors_create if import_errors_link: template_data['import_errors_link'] = import_errors_link if import_errors_create or import_errors_link: message = _('Action completed successfully') messages.warning(request, message) form = FileUploadSubjectForm() except KeyError as e: message = _("The file structure is wrong. It needs a label called: " + e.message) form.add_error('file_upload', message) SubjectService.rollback(subject_create, subject_link, certifications) except AttributeError: message = _("Please, check the attributes of the subjects") form.add_error('file_upload', message) SubjectService.rollback(subject_create, subject_link, certifications) except TypeError: message = _("Please, check the xml syntax and data values") form.add_error('file_upload', message) SubjectService.rollback(subject_create, subject_link, certifications) except Exception: message = _("Please, check the file") form.add_error('file_upload', message) SubjectService.rollback(subject_create, subject_link, certifications) else: form = FileUploadSubjectForm() template_data['form'] = form template_name = 'subject/import_subject.html' return render_to_response(template_name, template_data, context_instance=RequestContext(request))
def __init__(self, *args, **kwargs): lecturer_id = kwargs.pop('lecturer_id') super(LecturerStudentFilterForm, self).__init__(*args, **kwargs) self.fields['subject'].queryset = SubjectService.get_lecturer_subjects( lecturer_id)