hackspace/mhackspace/requests/models.py

71 lines
2.1 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="+", on_delete=models.CASCADE
)
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)