diff --git a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/skyonnadmin/models.py b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/skyonnadmin/models.py index a915cd5..bd12b0f 100644 --- a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/skyonnadmin/models.py +++ b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/skyonnadmin/models.py @@ -177,6 +177,7 @@ class InternalTeam(models.Model): Email2 = models.EmailField(max_length=50,null=True) Level = models.CharField(max_length=50, null=True) + FullName = models.CharField(max_length=100, null=True) Login = models.EmailField(null=True) diff --git a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/skyonnadmin/urls.py b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/skyonnadmin/urls.py index 18fd45e..985b0de 100644 --- a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/skyonnadmin/urls.py +++ b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/skyonnadmin/urls.py @@ -47,6 +47,7 @@ urlpatterns = [ path('edit_teamDetails/', views.edit_teamDetails, name='edit_teamDetails'), path('delete_teamDetails/', views.delete_teamDetails, name='delete_teamDetails'), + path('validate_field/', views.validate_field, name='validate_field'), path('validate_cell_field/', views.validate_cell_field, name='validate_cell_field'), diff --git a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/skyonnadmin/views.py b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/skyonnadmin/views.py index 14ce1c5..dbf2064 100644 --- a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/skyonnadmin/views.py +++ b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/skyonnadmin/views.py @@ -1075,6 +1075,7 @@ def save_Internal_team_Details(request): fullName = FirstName + '' + LastName + Login = Email1 Password = FirstName + '@123' user_id = FirstName.upper()[:3] + PhoneNo1[:4] diff --git a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/skyonnweb/settings.py b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/skyonnweb/settings.py index 759d317..acfa697 100644 --- a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/skyonnweb/settings.py +++ b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/skyonnweb/settings.py @@ -73,6 +73,7 @@ TEMPLATES = [ WSGI_APPLICATION = 'skyonnweb.wsgi.application' + # Database # https://docs.djangoproject.com/en/4.2/ref/settings/#databases diff --git a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/templates/user/dashboard.html b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/templates/user/dashboard.html index 80ba3de..a3d5102 100644 --- a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/templates/user/dashboard.html +++ b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/templates/user/dashboard.html @@ -1015,6 +1015,7 @@ function sendReply(event, id) { ) || MessagesData.find(msg => msg.latest_message.message_id === id) || MessagesData.find(msg => msg.parent_message_id === id) console.log(msg); + // Collect recipients from dynamic email bars (instead of directly from the 'toField' input) const emailBarElements = document.querySelectorAll('#emailBars .email-bar'); diff --git a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/templates/user/messages.html b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/templates/user/messages.html index 2504bc2..509cd25 100644 --- a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/templates/user/messages.html +++ b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/templates/user/messages.html @@ -253,6 +253,7 @@ input { box-shadow: 0px 2px 5px -2px rgba(0, 0, 0, 0.75); } + /* Style for the 'add' icon */ .sidebar__compose .material-icons { margin-right: 8px; /* Add space between the icon and text */ diff --git a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/user/models.py b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/user/models.py index 412e6f2..cf8c58b 100644 --- a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/user/models.py +++ b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/user/models.py @@ -3,6 +3,7 @@ from django.contrib.auth.models import AbstractBaseUser, BaseUserManager from django.contrib.auth.models import User from skyonnadmin.models import InternalTeam + class CustomUserManager(BaseUserManager): def create_user(self, phone, password=None, **extra_fields): if not phone: @@ -69,26 +70,26 @@ class CustomUser(AbstractBaseUser): class JobPosting(models.Model): Client = models.CharField(max_length=100, null=True, blank=True) - JobID = models.CharField(max_length=100,null=True) - Location = models.CharField(max_length=255,null=True) - SPOC = models.CharField(max_length=255,null=True) + JobID = models.CharField(max_length=100, null=True) + Location = models.CharField(max_length=255, null=True) + SPOC = models.CharField(max_length=255, null=True) SPOC2 = models.CharField(max_length=255, blank=True, null=True) NoOfPosting = models.IntegerField(null=True) StartDate = models.DateField(null=True) CloseDate = models.DateField(null=True) - BudgetMin = models.CharField(max_length=20,null=True) - timePeriod = models.CharField(max_length=20,null=True,blank=True) - minAmount = models.CharField(max_length=20,null=True) - maxAmount = models.CharField(max_length=20,null=True) + BudgetMin = models.CharField(max_length=20, null=True) + timePeriod = models.CharField(max_length=20, null=True, blank=True) + minAmount = models.CharField(max_length=20, null=True) + maxAmount = models.CharField(max_length=20, null=True) - Qualification = models.CharField(max_length=100,null=True) - Header = models.CharField(max_length=255,null=True) + Qualification = models.CharField(max_length=100, null=True) + Header = models.CharField(max_length=255, null=True) JobDescription = models.TextField(null=True) - Experience_in_Yrs = models.CharField(max_length=50,null=True) + Experience_in_Yrs = models.CharField(max_length=50, null=True) SpecialInstructions = models.TextField(blank=True, null=True) - JD = models.FileField(upload_to='JD/', null= True) - slice_JD = models.CharField(max_length=255,null=True) + JD = models.FileField(upload_to='JD/', null=True) + slice_JD = models.CharField(max_length=255, null=True) # class SPOC(models.Model): @@ -98,18 +99,19 @@ class JobPosting(models.Model): # return self.name class Message(models.Model): - message_id = models.CharField(unique=True,max_length=255, null=True) - sender = models.ForeignKey(InternalTeam, related_name='sent_messages',to_field='Email1', on_delete=models.CASCADE) + message_id = models.CharField(unique=True, max_length=255, null=True) + sender = models.ForeignKey(InternalTeam, related_name='sent_messages', to_field='Email1', on_delete=models.CASCADE) recipient = models.ManyToManyField(InternalTeam, related_name='received_messages') subject = models.CharField(max_length=255) body = models.TextField() is_read = models.BooleanField(default=False) sent_at = models.DateTimeField(auto_now_add=True) - sender_fullname = models.CharField(max_length=255,null=True) - recipient_fullname = models.CharField(max_length=255,null=True) - reply_to = models.ForeignKey('self',null=True,blank=True,on_delete=models.CASCADE,related_name='replies', to_field='message_id') + sender_fullname = models.CharField(max_length=255, null=True) + recipient_fullname = models.CharField(max_length=255, null=True) + reply_to = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE, related_name='replies', + to_field='message_id') is_trashed = models.BooleanField(default=False) - attachment = models.FileField(upload_to='attachment/',null=True,blank=True) + attachment = models.FileField(upload_to='attachment/', null=True, blank=True) seen_time = models.DateTimeField(null=True, blank=True) def __str__(self): @@ -118,18 +120,20 @@ class Message(models.Model): class Meta: ordering = ['-sent_at'] + class MessageStatus(models.Model): message = models.ForeignKey(Message, on_delete=models.CASCADE, to_field='message_id', related_name='status') user = models.ForeignKey(InternalTeam, on_delete=models.CASCADE, to_field='Email1', null=True) is_read = models.BooleanField(default=False) seen_time = models.DateTimeField(null=True, blank=True) + class FileDownload(models.Model): # Reference to the message containing the attachment - message = models.ForeignKey(Message, on_delete=models.CASCADE,to_field='message_id', related_name='downloads') - user = models.ForeignKey(InternalTeam, on_delete=models.CASCADE,to_field='Email1',null=True) + message = models.ForeignKey(Message, on_delete=models.CASCADE, to_field='message_id', related_name='downloads') + user = models.ForeignKey(InternalTeam, on_delete=models.CASCADE, to_field='Email1', null=True) first_downloaded = models.DateTimeField(auto_now_add=True) last_downloaded = models.DateTimeField(auto_now=True) def __str__(self): - return f"Download details for message_id: {self.message.message_id}" \ No newline at end of file + return f"Download details for message_id: {self.message.message_id}" diff --git a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/user/urls.py b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/user/urls.py index 7a46844..db4b973 100644 --- a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/user/urls.py +++ b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/user/urls.py @@ -1,6 +1,7 @@ from django.urls import path from . import views + urlpatterns = [ path('user/', views.home, name='home'), path('create_user/', views.create_user, name='create_user'), # URL for creating user diff --git a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/user/views.py b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/user/views.py index ab70796..d5df36d 100644 --- a/Arminta_web/skyonnweb/skyonnweb/skyonnweb/user/views.py +++ b/Arminta_web/skyonnweb/skyonnweb/skyonnweb/user/views.py @@ -1156,6 +1156,7 @@ def fetch_download_timestamps(request, message_id): return JsonResponse({'status': 'error', 'message': 'Invalid request method'}, status=400) + def get_main_message_id(request,message_id): if request.method == 'GET': current_message = get_object_or_404(Message, message_id=message_id)