Ejemplo n.º 1
0
class MyRecordsView(View):
    template_name = 'records/profile/my_records.html'

    @method_decorator(login_required(login_url='/'))
    @method_decorator(
        authorized_roles(roles=['student', 'adviser', 'ktto', 'rdco']))
    def get(self, request):
        return render(request, self.template_name)

    def post(self, request):
        user_records = UserRecord.objects.filter(user=request.user)
        data = []
        for user_record in user_records:
            adviser_checked = 'pending'
            ktto_checked = 'pending'
            rdco_checked = 'pending'
            for checked_record in CheckedRecord.objects.filter(
                    record=user_record.record):
                if checked_record.checked_by.role.pk == 3:
                    adviser_checked = checked_record.status
                elif checked_record.checked_by.role.pk == 4:
                    ktto_checked = checked_record.status
                elif checked_record.checked_by.role.pk == 5:
                    rdco_checked = checked_record.status
            data.append([
                user_record.record.pk,
                '<a href="/record/' + str(user_record.record.pk) + '">' +
                user_record.record.title + '</a>',
                adviser_checked,
                ktto_checked,
                rdco_checked,
                '<a href="#">resubmit</a> | <a href="#">remove</a>',
            ])
        return JsonResponse({"data": data})
Ejemplo n.º 2
0
class PendingRecordsView(View):
    template_name = 'records/profile/pending_records.html'

    @method_decorator(login_required(login_url='/'))
    @method_decorator(
        authorized_roles(roles=['student', 'adviser', 'ktto', 'rdco']))
    def get(self, request):
        return render(request, self.template_name)

    def post(self, request):
        if request.user.role.id == 3:
            with connection.cursor() as cursor:
                cursor.execute(
                    "select records_record.id, records_record.title, records_checkedrecord.checked_by_id from records_record left join records_checkedrecord on records_record.id = records_checkedrecord.record_id where checked_by_id is NULL;"
                )
                rows = cursor.fetchall()

            data = []
            for row in rows:
                data.append([
                    row[0],
                    '<a href="/record/' + str(row[0]) + '">' + row[1] + '</a>',
                ])
        elif request.user.role.id == 4:
            with connection.cursor() as cursor:
                cursor.execute(
                    "SELECT records_record.id, records_record.title FROM records_record INNER JOIN records_checkedrecord ON records_record.id = records_checkedrecord.record_id INNER JOIN accounts_user ON records_checkedrecord.checked_by_id = accounts_user.id WHERE accounts_user.role_id = 3 AND records_checkedrecord.status = 'approved' AND records_record.id NOT IN (SELECT records_checkedrecord.record_id FROM records_checkedrecord INNER JOIN accounts_user ON records_checkedrecord.checked_by_id = accounts_user.id WHERE accounts_user.role_id = 4)"
                )
                rows = cursor.fetchall()
            data = []
            for row in rows:
                data.append(
                    [row[0], f'<a href="/record/{row[0]}">{row[1]}</a>'])

        elif request.user.role.id == 5:
            with connection.cursor() as cursor:
                cursor.execute(
                    "SELECT records_record.id, records_record.title FROM records_record INNER JOIN records_checkedrecord ON records_record.id = records_checkedrecord.record_id INNER JOIN accounts_user ON records_checkedrecord.checked_by_id = accounts_user.id WHERE accounts_user.role_id = 4 AND records_checkedrecord.status = 'approved' AND records_record.id NOT IN (SELECT records_checkedrecord.record_id FROM records_checkedrecord INNER JOIN accounts_user ON records_checkedrecord.checked_by_id = accounts_user.id WHERE accounts_user.role_id = 5)"
                )
                rows = cursor.fetchall()
            data = []
            for row in rows:
                data.append(
                    [row[0], f'<a href="/record/{row[0]}">{row[1]}</a>'])
        return JsonResponse({"data": data})
Ejemplo n.º 3
0
class DeclinedRecordsView(View):
    template_name = 'records/profile/declined_records.html'

    @method_decorator(login_required(login_url='/'))
    @method_decorator(
        authorized_roles(roles=['student', 'adviser', 'ktto', 'rdco']))
    def get(self, request):
        return render(request, self.template_name)

    def post(self, request):
        checked_records = CheckedRecord.objects.filter(checked_by=request.user,
                                                       status='declined')
        data = []
        for checked_record in checked_records:
            data.append([
                checked_record.record.pk,
                f'<a href="/record/{checked_record.record.pk}">{checked_record.record.title}</a>'
            ])
        return JsonResponse({'data': data})
Ejemplo n.º 4
0
class Add(View):
    name = 'records/add.html'
    author_roles = AuthorRole.objects.all()
    conference_levels = ConferenceLevel.objects.all()
    budget_types = BudgetType.objects.all()
    collaboration_types = CollaborationType.objects.all()
    record_form = forms.RecordForm()
    publication_form = forms.PublicationForm()
    record = Record.objects.all()

    @method_decorator(
        authorized_roles(roles=['student', 'adviser', 'ktto', 'rdco']))
    @method_decorator(login_required(login_url='/'))
    def get(self, request):
        context = {
            'author_roles': self.author_roles,
            'conference_levels': self.conference_levels,
            'budget_types': self.budget_types,
            'collaboration_types': self.collaboration_types,
            'record_form': self.record_form,
            'publication_form': self.publication_form,
        }
        return render(request, self.name, context)

    def post(self, request):
        error_messages = []
        record_form = forms.RecordForm(request.POST, request.FILES)
        if record_form.is_valid():
            record = record_form.save(commit=False)
            file_is_valid = True
            file = record_form.cleaned_data.get('abstract_file', False)
            if file and file.size > 5242880:
                file_is_valid = False
            else:
                record.save()
                UserRecord(user=request.user, record=record).save()
            if record is not None and file_is_valid:
                publication_form = forms.PublicationForm(request.POST)
                if publication_form.is_valid():
                    publication = publication_form.save(commit=False)
                    publication.record = record
                    publication.save()
                author_names = request.POST.getlist('author_names[]', None)
                author_roles = request.POST.getlist('author_roles[]', None)
                conference_levels = request.POST.getlist(
                    'conference_levels[]', None)
                conference_titles = request.POST.getlist(
                    'conference_titles[]', None)
                conference_dates = request.POST.getlist(
                    'conference_dates[]', None)
                conference_venues = request.POST.getlist(
                    'conference_venues[]', None)

                budget_types = request.POST.getlist('budget_types[]', None)
                budget_allocations = request.POST.getlist(
                    'budget_allocations[]', None)
                funding_sources = request.POST.getlist('funding_sources[]',
                                                       None)
                industries = request.POST.getlist('industries[]', None)
                institutions = request.POST.getlist('institutions[]', None)
                collaboration_types = request.POST.getlist(
                    'collaboration_types[]', None)
                for i, author_name in enumerate(author_names):
                    Author(
                        name=author_name,
                        author_role=AuthorRole.objects.get(pk=author_roles[i]),
                        record=record).save()

                for i, conference_title in enumerate(conference_titles):
                    Conference(title=conference_title,
                               conference_level=ConferenceLevel.objects.get(
                                   pk=conference_levels[i]),
                               date=conference_dates[i],
                               venue=conference_venues[i],
                               record=record).save()

                for i, budget_type in enumerate(budget_types):
                    Budget(
                        budget_type=BudgetType.objects.get(pk=budget_types[i]),
                        budget_allocation=budget_allocations[i],
                        funding_source=funding_sources[i],
                        record=record).save()
                for i, collaboration_type in enumerate(collaboration_types):
                    Collaboration(
                        collaboration_type=CollaborationType.objects.get(
                            pk=collaboration_types[i]),
                        industry=industries[i],
                        institution=institutions[i],
                        record=record).save()
                return redirect('records-index')
            elif not file_is_valid:
                error = {
                    'title': 'Unable to save record',
                    'body': 'The file cannot be more than 5 MB'
                }
                error_messages.append(error)
            else:
                error = {
                    'title':
                    'Unable to save record',
                    'body':
                    'A record with the same record information already exists'
                }
                error_messages.append(error)
        else:
            error_messages.append({
                'title':
                'Unable to save record',
                'body':
                'Some fields contains invalid values while trying to save the record'
            })
        context = {
            'author_roles': self.author_roles,
            'conference_levels': self.conference_levels,
            'budget_types': self.budget_types,
            'collaboration_types': self.collaboration_types,
            'record_form': self.record_form,
            'publication_form': self.publication_form,
            'error_messages': error_messages,
        }
        return render(request, self.name, context)