fix the lead assigned and lead tracking qs
This commit is contained in:
parent
afa8edb994
commit
bea6894f0a
@ -38,6 +38,7 @@ from django_ledger.models import (
|
|||||||
)
|
)
|
||||||
from django.contrib.contenttypes.fields import GenericForeignKey
|
from django.contrib.contenttypes.fields import GenericForeignKey
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
from django.core.serializers.json import DjangoJSONEncoder
|
||||||
from appointment.models import StaffMember
|
from appointment.models import StaffMember
|
||||||
from plans.quota import get_user_quota
|
from plans.quota import get_user_quota
|
||||||
from plans.models import UserPlan
|
from plans.models import UserPlan
|
||||||
@ -2859,4 +2860,58 @@ class PoItemsUploaded(models.Model):
|
|||||||
)
|
)
|
||||||
status = models.CharField(max_length=100, null=True, blank=True)
|
status = models.CharField(max_length=100, null=True, blank=True)
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
updated_at = models.DateTimeField(auto_now=True)
|
updated_at = models.DateTimeField(auto_now=True)
|
||||||
|
|
||||||
|
class ExtraInfo(models.Model):
|
||||||
|
"""
|
||||||
|
Stores additional information for any model with:
|
||||||
|
- Multiple generic relationships
|
||||||
|
- JSON data storage
|
||||||
|
- Tracking fields
|
||||||
|
"""
|
||||||
|
# Primary GenericForeignKey (main linked object)
|
||||||
|
content_type = models.ForeignKey(
|
||||||
|
ContentType,
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
related_name="extra_info_primary"
|
||||||
|
)
|
||||||
|
object_id = models.PositiveIntegerField()
|
||||||
|
content_object = GenericForeignKey('content_type', 'object_id')
|
||||||
|
|
||||||
|
# Secondary GenericForeignKey (optional additional link)
|
||||||
|
related_content_type = models.ForeignKey(
|
||||||
|
ContentType,
|
||||||
|
on_delete=models.SET_NULL,
|
||||||
|
null=True,
|
||||||
|
blank=True,
|
||||||
|
related_name="extra_info_secondary"
|
||||||
|
)
|
||||||
|
related_object_id = models.PositiveIntegerField(null=True, blank=True)
|
||||||
|
related_object = GenericForeignKey('related_content_type', 'related_object_id')
|
||||||
|
|
||||||
|
# JSON Data Storage
|
||||||
|
data = models.JSONField(
|
||||||
|
encoder=DjangoJSONEncoder,
|
||||||
|
default=dict,
|
||||||
|
blank=True
|
||||||
|
)
|
||||||
|
|
||||||
|
# Metadata
|
||||||
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
|
updated_at = models.DateTimeField(auto_now=True)
|
||||||
|
created_by = models.ForeignKey(
|
||||||
|
User,
|
||||||
|
on_delete=models.SET_NULL,
|
||||||
|
null=True,
|
||||||
|
related_name="created_extra_info"
|
||||||
|
)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
indexes = [
|
||||||
|
models.Index(fields=['content_type', 'object_id']),
|
||||||
|
models.Index(fields=['related_content_type', 'related_object_id']),
|
||||||
|
]
|
||||||
|
verbose_name_plural = "Extra Info"
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"ExtraInfo for {self.content_object} ({self.content_type})"
|
||||||
@ -15,7 +15,8 @@ from django_ledger.models import (
|
|||||||
TransactionModel,
|
TransactionModel,
|
||||||
LedgerModel,
|
LedgerModel,
|
||||||
AccountModel,
|
AccountModel,
|
||||||
PurchaseOrderModel
|
PurchaseOrderModel,
|
||||||
|
EstimateModel
|
||||||
)
|
)
|
||||||
from . import models
|
from . import models
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
@ -977,23 +978,41 @@ def sale_order_created_notification(sender, instance, created, **kwargs):
|
|||||||
@receiver(post_save, sender=models.Lead)
|
@receiver(post_save, sender=models.Lead)
|
||||||
def lead_created_notification(sender, instance, created, **kwargs):
|
def lead_created_notification(sender, instance, created, **kwargs):
|
||||||
if created:
|
if created:
|
||||||
models.Notification.objects.create(
|
if instance.staff:
|
||||||
user=instance.staff.user,
|
models.Notification.objects.create(
|
||||||
message=f"""
|
user=instance.staff.user,
|
||||||
New Lead has been added.
|
message=f"""
|
||||||
<a href="{reverse('lead_detail',kwargs={'dealer_slug':instance.dealer.slug,'slug':instance.slug})}" target="_blank">View</a>
|
New Lead has been added.
|
||||||
""",
|
<a href="{reverse('lead_detail',kwargs={'dealer_slug':instance.dealer.slug,'slug':instance.slug})}" target="_blank">View</a>
|
||||||
)
|
""",
|
||||||
@receiver(post_save, sender=models.Lead)
|
)
|
||||||
def estimate__notification(sender, instance, created, **kwargs):
|
@receiver(post_save, sender=EstimateModel)
|
||||||
if created:
|
def estimate_in_review_notification(sender, instance, created, **kwargs):
|
||||||
models.Notification.objects.create(
|
if instance.is_review():
|
||||||
user=instance.staff.user,
|
recipients = models.CustomGroup.objects.filter(dealer=instance.dealer,name="Manager").first().group.user_set.exclude(email=instance.dealer.user.email)
|
||||||
message=f"""
|
dealer = models.Dealer.objects.get(entity=instance.entity)
|
||||||
New Lead has been added.
|
for recipient in recipients:
|
||||||
<a href="{reverse('lead_detail',kwargs={'dealer_slug':instance.dealer.slug,'slug':instance.slug})}" target="_blank">View</a>
|
models.Notification.objects.create(
|
||||||
""",
|
user=recipient,
|
||||||
)
|
message=f"""
|
||||||
|
Estimate {instance.estimate_number} is in review.
|
||||||
|
Please review and approve it at your earliest convenience.
|
||||||
|
<a href="{reverse('estimate_detail', kwargs={'dealer_slug': dealer.slug, 'pk': instance.pk})}" target="_blank">View</a>
|
||||||
|
""")
|
||||||
|
|
||||||
|
@receiver(post_save, sender=EstimateModel)
|
||||||
|
def estimate_in_approve_notification(sender, instance, created, **kwargs):
|
||||||
|
if instance.is_approved():
|
||||||
|
recipients = models.CustomGroup.objects.filter(dealer=instance.dealer,name="Manager").first().group.user_set.exclude(email=instance.dealer.user.email)
|
||||||
|
dealer = models.Dealer.objects.get(entity=instance.entity)
|
||||||
|
for recipient in recipients:
|
||||||
|
models.Notification.objects.create(
|
||||||
|
user=recipient,
|
||||||
|
message=f"""
|
||||||
|
Estimate {instance.estimate_number} is in review.
|
||||||
|
Please review and approve it at your earliest convenience.
|
||||||
|
<a href="{reverse('estimate_detail', kwargs={'dealer_slug': dealer.slug, 'pk': instance.pk})}" target="_blank">View</a>
|
||||||
|
""")
|
||||||
|
|
||||||
# @receiver(post_save, sender=models.Lead)
|
# @receiver(post_save, sender=models.Lead)
|
||||||
# def lead_created_notification(sender, instance, created, **kwargs):
|
# def lead_created_notification(sender, instance, created, **kwargs):
|
||||||
|
|||||||
@ -5531,10 +5531,11 @@ def lead_create(request,dealer_slug):
|
|||||||
is_sa_import=True, pk__in=dealer_make_list
|
is_sa_import=True, pk__in=dealer_make_list
|
||||||
)
|
)
|
||||||
form.fields["staff"].queryset = form.fields["staff"].queryset.filter(
|
form.fields["staff"].queryset = form.fields["staff"].queryset.filter(
|
||||||
dealer=dealer,staff_member__user__groups__name__contains="Sales")
|
dealer=dealer,staff_member__user__groups__permissions__codename__contains="add_lead")
|
||||||
# form.fields["staff"].queryset = form.fields["staff"].queryset.filter(
|
# form.fields["staff"].queryset = form.fields["staff"].queryset.filter(
|
||||||
# dealer=dealer
|
# dealer=dealer
|
||||||
# )
|
# )
|
||||||
|
print(form.fields["staff"].queryset)
|
||||||
|
|
||||||
if hasattr(request.user.staffmember, "staff"):
|
if hasattr(request.user.staffmember, "staff"):
|
||||||
form.initial["staff"] = request.user.staffmember.staff
|
form.initial["staff"] = request.user.staffmember.staff
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user