hackspace/mhackspace/requests/models.py

64 lines
2.0 KiB
Python

# -*- coding: utf-8 -*-
from django.conf import settings
from django.db import models
from django.urls import reverse
from django.utils import timezone
from django.contrib.sites.models import Site
from django.db.models.signals import post_save
from martor.models import MartorField
from mhackspace.base.tasks import matrix_message
REQUEST_TYPES = (
(0, 'Equipment request'),
(1, 'Educational request'),
(2, 'Training request'))
class UserRequest(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
related_name='+'
)
title = models.CharField(max_length=255, help_text='Whats being requested ?')
request_type = models.IntegerField(choices=REQUEST_TYPES, null=False)
acquired = models.BooleanField(default=False)
cost = models.DecimalField(
max_digits=6,
decimal_places=2,
help_text='Leave blank, if no associated cost, or add estimated cost if not sure.'
)
description = MartorField(help_text="detail of what's being requested and where it can be purchased")
created_date = models.DateTimeField(default=timezone.now)
def request_type_string(self):
return REQUEST_TYPES[self.request_type][1]
def get_absolute_url(self):
return reverse(
'requests_detail',
kwargs={'pk': self.pk})
class Meta:
ordering = ('acquired', 'created_date',)
class UserRequestsComment(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
request = models.ForeignKey(UserRequest, on_delete=models.CASCADE)
comment = MartorField(help_text='Your comments')
created_date = models.DateTimeField(default=timezone.now)
def send_topic_update_email(sender, instance, **kwargs):
matrix_message.delay(
prefix=' - REQUEST',
message='%s - https://%s%s' % (
instance.title,
Site.objects.get_current().domain,
instance.get_absolute_url()))
post_save.connect(send_topic_update_email, sender=UserRequest)