SciPost Code Repository

Skip to content
Snippets Groups Projects
models.py 2.12 KiB
Newer Older
Jorran de Wit's avatar
Jorran de Wit committed
__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"


from django.core.exceptions import ValidationError
Jorran de Wit's avatar
COI
Jorran de Wit committed
from django.db import models

Jorran de Wit's avatar
Jorran de Wit committed
from .constants import (
    CONFLICT_OF_INTEREST_STATUSES, STATUS_UNVERIFIED, CONFLICT_OF_INTEREST_TYPES, TYPE_OTHER)
Jorran de Wit's avatar
Jorran de Wit committed
from .managers import ConflictOfInterestQuerySet


class ConflictGroup(models.Model):
    """Group of related ConflictOfInterest objects linking conflicts based on meta data."""

    url = models.URLField(blank=True)
    title = models.CharField(max_length=256)

    related_submissions = models.ManyToManyField(
        'submissions.Submission', blank=True, related_name='conflict_groups')
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    def __str__(self):
        return 'Conflict group {}'.format(self.title[:30])
Jorran de Wit's avatar
COI
Jorran de Wit committed


class ConflictOfInterest(models.Model):
    """Conflict of Interest is a flagged relation between scientists."""

    status = models.CharField(
Jorran de Wit's avatar
Jorran de Wit committed
        max_length=16, choices=CONFLICT_OF_INTEREST_STATUSES, default=STATUS_UNVERIFIED)
Jorran de Wit's avatar
Jorran de Wit committed
    origin = models.ForeignKey('scipost.Contributor')
Jorran de Wit's avatar
Jorran de Wit committed
    to_contributor = models.ForeignKey(
        'scipost.Contributor', blank=True, null=True, related_name='+')
    to_name = models.CharField(max_length=128, blank=True)
    type = models.CharField(
        max_length=16, choices=CONFLICT_OF_INTEREST_TYPES, default=TYPE_OTHER)

Jorran de Wit's avatar
Jorran de Wit committed
    conflict_group = models.ForeignKey('conflicts.ConflictGroup', null=True, blank=True)

Jorran de Wit's avatar
Jorran de Wit committed
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

Jorran de Wit's avatar
Jorran de Wit committed
    objects = ConflictOfInterestQuerySet.as_manager()

    class Meta:
        default_related_name = 'conflicts'

Jorran de Wit's avatar
Jorran de Wit committed
    def __str__(self):
Jorran de Wit's avatar
Jorran de Wit committed
        _str = '{} {} to {}'.format(self.get_type_display(), self.origin, self.to_name)
Jorran de Wit's avatar
Jorran de Wit committed
        return _str
Jorran de Wit's avatar
COI
Jorran de Wit committed

    def clean(self):
Jorran de Wit's avatar
Jorran de Wit committed
        """Check if Conflict of Interest is complete."""
Jorran de Wit's avatar
COI
Jorran de Wit committed
        if not self.to_contributor and not self.to_unregistered:
Jorran de Wit's avatar
Jorran de Wit committed
            raise ValidationError(
                'Conflict of Interest must be related to Contributor or UnregisteredAuthor.')