Skip to content

Commit

Permalink
#43 チケットシステムの修正とメール送信機能の追加.
Browse files Browse the repository at this point in the history
  • Loading branch information
yoneyan committed Sep 14, 2024
1 parent cee3ec8 commit 1cce464
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 38 deletions.
24 changes: 13 additions & 11 deletions dsbd/notify.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@
def notify_db_save(table_name="", type=0, data=""):
event_name = "create"
color = "good"
if type == 1:
event_name = "update"
if type == 2:
event_name = "delete"
color = "danger"
match type:
case 1:
event_name = "update"
case 2:
event_name = "delete"
color = "danger"
client = WebhookClient(settings.SLACK_WEBHOOK_LOG)
client.send(
text="[%s(%s)]" % (table_name, event_name),
Expand All @@ -34,9 +35,10 @@ def notice_payment(metadata_type="", event_type="", data=None):


def get_color(status):
if status == "customer.subscription.created":
return "warning"
elif status == "customer.subscription.updated":
return "good"
elif status == "customer.subscription.deleted":
return "danger"
match status:
case "customer.subscription.created":
return "warning"
case "customer.subscription.updated":
return "good"
case "customer.subscription.deleted":
return "danger"
11 changes: 11 additions & 0 deletions dsbd/templates/mail/ticket/message.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{{ username }} 様

下記チケットより、新規メッセージがあります。
-- チケット情報 --
チケット番号: {{ ticket_id }}
タイトル: {{ ticket_title }}
-- 新規メッセージ --
{{ message }}

詳細やチャット履歴はWebシステムよりご覧いただけます。

36 changes: 10 additions & 26 deletions ticket/consumers.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,12 @@
import datetime
import json

from asgiref.sync import sync_to_async
from channels.generic.websocket import AsyncWebsocketConsumer
from django.conf import settings
from django.utils import timezone

from ticket.models import Chat, Ticket


@sync_to_async()
def get_ticket(id):
return Ticket.objects.filter(id=id).first()


class ChatConsumer(AsyncWebsocketConsumer):
def __init__(self, *args, **kwargs):
super().__init__(args, kwargs)
Expand All @@ -32,7 +25,7 @@ def add_chat(self, message):
@sync_to_async
def check(self):
ticket = Ticket.objects.filter(id=self.ticket_id).first()
if ticket.group is None:
if not ticket.group:
if self.user.id != ticket.user.id:
return False
else:
Expand Down Expand Up @@ -60,7 +53,6 @@ async def connect(self):
return

await self.get_ticket()

await self.accept()

# JOIN CHAT Group
Expand All @@ -72,26 +64,21 @@ async def disconnect(self, close_code):
print("ERROR")
# LEAVE CHAT Group
await self.channel_layer.group_discard(self.chat_group_name, self.channel_name)
pass

async def receive(self, text_data=None, bytes_data=None):
text_data_json = json.loads(text_data)
message = text_data_json["message"]

await self.add_chat(message)

time_format = "%Y/%m/%d %H:%M:%S"
time = (
datetime.datetime.now(tz=datetime.timezone.utc if settings.USE_TZ else None)
.astimezone(timezone(settings.TIME_ZONE))
.strftime(time_format)
)
current_time = timezone.localtime(timezone.now())
formatted_time = current_time.strftime("%Y/%m/%d %H:%M:%S")

await self.channel_layer.group_send(
self.chat_group_name,
{
"type": "broadcast_message",
"time": time,
"time": formatted_time,
"user_id": self.user.id,
"username": self.user.username,
"group": self.group,
Expand All @@ -100,26 +87,23 @@ async def receive(self, text_data=None, bytes_data=None):
},
)

async def broadcast_message(self, event):
time = event["time"]
user_id = int(event["user_id"])
async def broadcast_message(self, event: dict):
username = event["username"]
group = int(event["group"])
message = event["message"]
is_admin = event["is_admin"]
group = event["group"]
if is_admin:
username = ""
group = 0

await self.send(
text_data=json.dumps(
{
"time": time,
"user_id": user_id,
"time": event["time"],
"user_id": event["user_id"],
"username": username,
"group": group,
"message": message,
"is_admin": is_admin,
"message": event["message"],
"is_admin": event["is_admin"],
}
)
)
17 changes: 16 additions & 1 deletion ticket/signals.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
from django.conf import settings
from django.core.mail import send_mail
from django.db.models.signals import post_save, pre_delete, pre_save
from django.dispatch import receiver
from django.template.loader import render_to_string

from dsbd.notify import notify_db_save
from ticket.models import Chat, Ticket
from ticket.tool import SignalTool
from ticket.tool import SignalTool, get_user_lists


@receiver(pre_save, sender=Ticket)
Expand Down Expand Up @@ -43,6 +46,18 @@ def post_chat(sender, instance, created, **kwargs):
if created:
text = SignalTool().get_create_chat(True, instance)
notify_db_save(table_name="Chat", type=0, data=text)
subject = "[HomeNOC Dashboard System]新着のメッセージがあります"
for user_list in get_user_lists(instance.ticket):
message = render_to_string(
"mail/ticket/message.txt",
{
"username": user_list.username,
"ticket_id": instance.ticket.id,
"ticket_title": instance.ticket.title,
"message": instance.body,
},
)
send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [user_list.email], fail_silently=False)
else:
text = SignalTool().get_update_chat(instance._pre_save_instance, instance)
notify_db_save(table_name="Chat", type=1, data=text)
Expand Down
7 changes: 7 additions & 0 deletions ticket/tool.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,10 @@ def admin_to_str(self, is_admin):

def active_to_str(self, is_admin):
return "有効" if is_admin else "無効"


def get_user_lists(ticket):
if ticket.group:
return ticket.group.users.all()
else:
return [ticket.user]

0 comments on commit 1cce464

Please sign in to comment.