File diff 6d2cc584cfae → 37c976c2f798
symposion/reviews/models.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
from datetime import datetime
 
from decimal import Decimal
 

	
 
from django.db import models
 
from django.db.models import Q
 
from django.db.models.signals import post_save
 

	
 
from django.contrib.auth.models import User
 

	
 
from markitup.fields import MarkupField
 

	
 
from symposion.proposals.models import ProposalBase
 
# from symposion.schedule.models import Presentation
 
from symposion.schedule.models import Presentation
 

	
 

	
 
class ProposalScoreExpression(object):
 
    
 
    def as_sql(self, qn, connection=None):
 
        sql = "((3 * plus_one + plus_zero) - (minus_zero + 3 * minus_one))"
 
        return sql, []
 
    
 
    def prepare_database_save(self, unused):
 
        return self
 

	
 

	
 
class Votes(object):
 
    PLUS_ONE = "+1"
 
    PLUS_ZERO = "+0"
 
    MINUS_ZERO = u"−0"
 
    MINUS_ONE = u"−1"
 
    
 
    CHOICES = [
 
        (PLUS_ONE, u"+1 — Good proposal and I will argue for it to be accepted."),
 
        (PLUS_ZERO, u"+0 — OK proposal, but I will not argue for it to be accepted."),
 
        (MINUS_ZERO, u"−0 — Weak proposal, but I will not argue strongly against acceptance."),
 
        (MINUS_ONE, u"−1 — Serious issues and I will argue to reject this proposal."),
 
    ]
...
 
@@ -258,52 +258,51 @@ class ProposalResult(models.Model):
 
            setattr(self, mapping[vote], models.F(mapping[vote]) - 1)
 
            self.comment_count = models.F("comment_count") - 1
 
        else:
 
            setattr(self, mapping[vote], models.F(mapping[vote]) + 1)
 
            self.comment_count = models.F("comment_count") + 1
 
        self.save()
 
        model = self.__class__
 
        model._default_manager.filter(pk=self.pk).update(score=ProposalScoreExpression())
 

	
 

	
 
class Comment(models.Model):
 
    proposal = models.ForeignKey("proposals.ProposalBase", related_name="comments")
 
    commenter = models.ForeignKey(User)
 
    text = MarkupField()
 
    
 
    # Or perhaps more accurately, can the user see this comment.
 
    public = models.BooleanField(choices=[
 
        (True, "public"),
 
        (False, "private"),
 
    ])
 
    commented_at = models.DateTimeField(default=datetime.now)
 

	
 

	
 
def promote_proposal(proposal):
 
    raise NotImplementedError()
 
    # presentation, created = Presentation.objects.get_or_create(
 
    #     pk=proposal.pk,
 
    #     defaults=dict(
 
    #         title=proposal.title,
 
    #         description=proposal.description,
 
    #         kind=proposal.kind,
 
    #         category=proposal.category,
 
    #         duration=proposal.duration,
 
    #         abstract=proposal.abstract,
 
    #         audience_level=proposal.audience_level,
 
    #         submitted=proposal.submitted,
 
    #         speaker=proposal.speaker,
 
    #     )
 
    # )
 
    # if created:
 
    #     for speaker in proposal.additional_speakers.all():
 
    #         presentation.additional_speakers.add(speaker)
 
    #         presentation.save()
 
    # return presentation
 
    
 
    if hasattr(proposal, "presentation") and proposal.presentation:
 
        # already promoted
 
        presentation = proposal.presentation
 
    else:
 
        presentation = Presentation(
 
            title = proposal.title,
 
            description = proposal.description,
 
            abstract = proposal.abstract,
 
            speaker = proposal.speaker,
 
            section = proposal.section,
 
            _proposal = proposal,
 
        )
 
        presentation.save()
 
        for speaker in proposal.additional_speakers.all():
 
            presentation.additional_speakers.add(speaker)
 
            presentation.save()
 
    
 
    return presentation
 

	
 

	
 
def accepted_proposal(sender, instance=None, **kwargs):
 
    if instance is None:
 
        return
 
    if instance.accepted == True:
 
        promote_proposal(instance.proposal)
 
post_save.connect(accepted_proposal, sender=ProposalResult)