new
parent
48bf694fe2
commit
50b5a695ef
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,11 @@
|
||||
from django.contrib import admin
|
||||
from .models import *
|
||||
# Register your models here.
|
||||
|
||||
admin.site.register(ChatRoom)
|
||||
admin.site.register(ChatMember)
|
||||
admin.site.register(ChatProject)
|
||||
admin.site.register(ChatMessage)
|
||||
admin.site.register(ChatMessageAttachment)
|
||||
admin.site.register(ChatMessageReaction)
|
||||
admin.site.register(ChatMessageSeen)
|
@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class OsichatConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'osichat'
|
@ -0,0 +1,79 @@
|
||||
# Generated by Django 4.2.5 on 2024-07-16 10:34
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('osinacore', '0097_remove_status_date_remove_status_time'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ChatMessage',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('content', models.TimeField(blank=True, null=True)),
|
||||
('date_sent', models.DateTimeField()),
|
||||
('member', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ChatRoom',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=50)),
|
||||
('date_created', models.DateTimeField()),
|
||||
('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ChatProject',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('public', models.BooleanField()),
|
||||
('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='osinacore.project')),
|
||||
('room', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='osichat.chatroom')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ChatMessageSeen',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('member', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
('message', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='osichat.chatmessage')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ChatMessageReaction',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('reaction', models.CharField(max_length=200)),
|
||||
('member', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
('message', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='osichat.chatmessage')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ChatMessageAttachment',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('attachment', models.TextField()),
|
||||
('message', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='osichat.chatmessage')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ChatMember',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('date_joined', models.DateTimeField()),
|
||||
('member', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
('room', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='osichat.chatroom')),
|
||||
],
|
||||
),
|
||||
]
|
Binary file not shown.
Binary file not shown.
@ -0,0 +1,42 @@
|
||||
from django.db import models
|
||||
from osinacore.models import *
|
||||
# Create your models here.
|
||||
|
||||
class ChatRoom(models.Model):
|
||||
name = models.CharField(max_length=50)
|
||||
created_by = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
|
||||
date_created = models.DateTimeField()
|
||||
|
||||
|
||||
class ChatMember(models.Model):
|
||||
member = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
room = models.ForeignKey(ChatRoom, on_delete=models.CASCADE)
|
||||
date_joined = models.DateTimeField()
|
||||
|
||||
|
||||
class ChatProject(models.Model):
|
||||
room = models.OneToOneField(ChatRoom, on_delete=models.CASCADE)
|
||||
project = models.ForeignKey(Project, on_delete=models.CASCADE)
|
||||
public = models.BooleanField()
|
||||
|
||||
|
||||
class ChatMessage(models.Model):
|
||||
member = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
|
||||
content = models.TimeField(null=True, blank=True)
|
||||
date_sent = models.DateTimeField()
|
||||
|
||||
|
||||
class ChatMessageAttachment(models.Model):
|
||||
message = models.ForeignKey(ChatMessage, on_delete=models.CASCADE)
|
||||
attachment = models.TextField()
|
||||
|
||||
|
||||
class ChatMessageReaction(models.Model):
|
||||
message = models.ForeignKey(ChatMessage, on_delete=models.CASCADE)
|
||||
member = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
reaction = models.CharField(max_length=200)
|
||||
|
||||
|
||||
class ChatMessageSeen(models.Model):
|
||||
message = models.ForeignKey(ChatMessage, on_delete=models.CASCADE)
|
||||
member = models.ForeignKey(User, on_delete=models.CASCADE)
|
@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
@ -0,0 +1,3 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,11 @@
|
||||
<span class="{% if new %} fade-in-up {% endif %}">{{last_ticket_department.department}}</span>
|
||||
|
||||
<style>
|
||||
@keyframes fadeInAndUp {
|
||||
from { opacity: 0; transform: translateY(12px); }
|
||||
to { opacity: 1; transform: translateY(0px); }
|
||||
}
|
||||
.fade-in-up {
|
||||
animation: fadeInAndUp 0.6s ease;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,30 @@
|
||||
{% if last_ticket_status.status == 'Open' %}
|
||||
<div class="flex justify-start items-center gap-1 {% if new %} fade-in-up {% endif %}">
|
||||
<div class="w-[16px] h-[16px] rounded-full bg-green-200 shadow-md"></div>
|
||||
<p class="text-secondosiblue font-light">Opened by {{last_ticket_status.added_by.first_name}} on
|
||||
{{ last_ticket_status.date_added|date:"d F Y, h:i A" }}</p>
|
||||
</div>
|
||||
{% elif last_ticket_status.status == 'Working On' %}
|
||||
<div class="flex justify-start items-center gap-1 {% if new %} fade-in-up {% endif %}"">
|
||||
<div class="w-[16px] h-[16px] rounded-full bg-yellow-200 shadow-md"></div>
|
||||
<p class="text-secondosiblue font-light">Updated to 'Working On' by
|
||||
{{last_ticket_status.added_by.first_name}} on {{ last_ticket_status.date_added|date:"d F Y, h:i A" }}
|
||||
</p>
|
||||
</div>
|
||||
{% elif last_ticket_status.status == 'Closed' %}
|
||||
<div class="flex justify-start items-center gap-1 {% if new %} fade-in-up {% endif %}">
|
||||
<div class="w-[16px] h-[16px] rounded-full bg-red-200 shadow-md"></div>
|
||||
<p class="text-secondosiblue font-light">Closed by {{last_ticket_status.added_by.first_name}} on
|
||||
{{ last_ticket_status.date_added|date:"d F Y, h:i A" }}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<style>
|
||||
@keyframes fadeInAndUp {
|
||||
from { opacity: 0; transform: translateY(12px); }
|
||||
to { opacity: 1; transform: translateY(0px); }
|
||||
}
|
||||
.fade-in-up {
|
||||
animation: fadeInAndUp 0.6s ease;
|
||||
}
|
||||
</style>
|
Loading…
Reference in New Issue