first
This commit is contained in:
commit
89a5d70512
284 files changed
+8364
No files matched your search
Whitespace-only changes.
@@ -0,0 +1,36 @@
|
||||
from django.contrib import admin
|
||||
from apps.lead.models import *
|
||||
# Register your models here.
|
||||
|
||||
|
||||
@admin.register(Lead)
|
||||
class LeadAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(LeadComment)
|
||||
class LeadCommentAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(LeadStep)
|
||||
class LeadStepAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(LeadType)
|
||||
class LeadTypeAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(LeadSource)
|
||||
class LeadSourceAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(LeadReason)
|
||||
class LeadReasonAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class LeadConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'apps.lead'
|
||||
@@ -0,0 +1,93 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-01 11:07
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('shop', '0011_producttype'),
|
||||
('cuser', '0005_smsopt'),
|
||||
('customer', '0003_alter_customer_address'),
|
||||
('workspace', '0003_alter_workspace_uuid'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='LeadType',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('title', models.CharField(max_length=50)),
|
||||
('sys_ws', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='workspace.workspace')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='LeadStep',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('name', models.CharField(max_length=50)),
|
||||
('sys_ws', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='workspace.workspace')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='LeadSource',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('title', models.CharField(max_length=50)),
|
||||
('sys_ws', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='workspace.workspace')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='LeadReason',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('name', models.CharField(max_length=50)),
|
||||
('sys_ws', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='workspace.workspace')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Lead',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('title', models.CharField(max_length=100)),
|
||||
('status', models.CharField(blank=True, choices=[('SU', 'OK'), ('FA', 'OK')], max_length=2, null=True)),
|
||||
('city', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='workspace.city')),
|
||||
('cuser_role', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='cuser.cuserrole')),
|
||||
('customer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='customer.customer')),
|
||||
('product_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='shop.producttype')),
|
||||
('reason', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='lead.leadreason')),
|
||||
('source', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='lead.leadsource')),
|
||||
('step', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='lead.leadstep')),
|
||||
('sys_ws', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='workspace.workspace')),
|
||||
('type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='lead.leadtype')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-01 11:08
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lead', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='leadreason',
|
||||
name='success',
|
||||
field=models.BooleanField(blank=True, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,30 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-05 07:11
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lead', '0002_leadreason_success'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='LeadProxy',
|
||||
fields=[
|
||||
],
|
||||
options={
|
||||
'proxy': True,
|
||||
'indexes': [],
|
||||
'constraints': [],
|
||||
},
|
||||
bases=('lead.lead',),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='lead',
|
||||
name='desc',
|
||||
field=models.CharField(default='1', max_length=300),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,21 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-07 15:15
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lead', '0003_leadproxy_lead_desc'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.DeleteModel(
|
||||
name='LeadProxy',
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='lead',
|
||||
name='status',
|
||||
field=models.CharField(blank=True, choices=[('UN', 'unknown'), ('SU', 'OK'), ('FA', 'FAIL')], max_length=2, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-07 15:15
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lead', '0004_delete_leadproxy_alter_lead_status'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='lead',
|
||||
name='status',
|
||||
field=models.CharField(blank=True, choices=[('SU', 'OK'), ('FA', 'FAIL'), ('UN', 'unknown')], default='UN', max_length=2, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,36 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-08 11:53
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cuser', '0005_smsopt'),
|
||||
('workspace', '0003_alter_workspace_uuid'),
|
||||
('lead', '0005_alter_lead_status'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='lead',
|
||||
name='status',
|
||||
field=models.CharField(blank=True, choices=[('FA', 'FAIL'), ('SU', 'OK'), ('UN', 'unknown')], default='UN', max_length=2, null=True),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='LeadComment',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('desc', models.CharField(max_length=300)),
|
||||
('cuser_role', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='cuser.cuserrole')),
|
||||
('lead', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lead_comment', to='lead.lead')),
|
||||
('sys_ws', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='workspace.workspace')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,17 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-09 10:05
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lead', '0006_alter_lead_status_leadcomment'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='leadcomment',
|
||||
options={'ordering': ['-created_at']},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-10 12:08
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lead', '0007_alter_leadcomment_options'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='lead',
|
||||
name='status',
|
||||
field=models.CharField(blank=True, choices=[('SU', 'OK'), ('UN', 'unknown'), ('FA', 'FAIL')], default='UN', max_length=2, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-13 10:31
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lead', '0008_alter_lead_status'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='lead',
|
||||
name='status',
|
||||
field=models.CharField(blank=True, choices=[('FA', 'FAIL'), ('UN', 'unknown'), ('SU', 'OK')], default='UN', max_length=2, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-13 10:35
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lead', '0009_alter_lead_status'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='lead',
|
||||
name='status',
|
||||
field=models.CharField(blank=True, choices=[('UN', 'unknown'), ('SU', 'OK'), ('FA', 'FAIL')], default='UN', max_length=2, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-13 15:45
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lead', '0010_alter_lead_status'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='lead',
|
||||
name='status',
|
||||
field=models.CharField(blank=True, choices=[('SU', 'OK'), ('FA', 'FAIL'), ('UN', 'unknown')], default='UN', max_length=2, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-18 08:40
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lead', '0011_alter_lead_status'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='lead',
|
||||
name='status',
|
||||
field=models.CharField(blank=True, choices=[('FA', 'FAIL'), ('SU', 'OK'), ('UN', 'unknown')], default='UN', max_length=2, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-20 07:49
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lead', '0012_alter_lead_status'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='lead',
|
||||
name='status',
|
||||
field=models.CharField(blank=True, choices=[('UN', 'unknown'), ('SU', 'OK'), ('FA', 'FAIL')], default='UN', max_length=2, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-21 08:09
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lead', '0013_alter_lead_status'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='lead',
|
||||
name='status',
|
||||
field=models.CharField(blank=True, choices=[('FA', 'FAIL'), ('SU', 'OK'), ('UN', 'unknown')], default='UN', max_length=2, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-21 08:10
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lead', '0014_alter_lead_status'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='lead',
|
||||
name='status',
|
||||
field=models.CharField(blank=True, choices=[('SU', 'OK'), ('FA', 'FAIL'), ('UN', 'unknown')], default='UN', max_length=2, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-21 09:15
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lead', '0015_alter_lead_status'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='lead',
|
||||
name='status',
|
||||
field=models.CharField(blank=True, choices=[('UN', 'unknown'), ('FA', 'FAIL'), ('SU', 'OK')], default='UN', max_length=2, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-21 09:16
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lead', '0016_alter_lead_status'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='lead',
|
||||
name='status',
|
||||
field=models.CharField(blank=True, choices=[('SU', 'OK'), ('FA', 'FAIL'), ('UN', 'unknown')], default='UN', max_length=2, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-21 12:44
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lead', '0017_alter_lead_status'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='lead',
|
||||
name='status',
|
||||
field=models.CharField(blank=True, choices=[('FA', 'FAIL'), ('UN', 'unknown'), ('SU', 'OK')], default='UN', max_length=2, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.1 on 2024-01-21 12:45
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lead', '0018_alter_lead_status'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='lead',
|
||||
name='status',
|
||||
field=models.CharField(blank=True, choices=[('UN', 'unknown'), ('SU', 'OK'), ('FA', 'FAIL')], default='UN', max_length=2, null=True),
|
||||
),
|
||||
]
|
||||
Whitespace-only changes.
@@ -0,0 +1,80 @@
|
||||
from django.db import models
|
||||
from utils.base_model import BaseModel
|
||||
from apps.customer.models import Customer as CustomerModel
|
||||
from apps.shop.models import ProductType as ProductTypeModel
|
||||
from apps.workspace.models import City as CityModel, Workspace as WorkspaceModel
|
||||
from apps.cuser.models import CuserRole as CuserRoleModel
|
||||
# Create your models here.
|
||||
|
||||
|
||||
class LeadType(BaseModel):
|
||||
title = models.CharField(max_length=50)
|
||||
sys_ws = models.ForeignKey(WorkspaceModel, on_delete=models.CASCADE, null=False, blank=False)
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
|
||||
|
||||
class LeadSource(BaseModel):
|
||||
title = models.CharField(max_length=50)
|
||||
sys_ws = models.ForeignKey(WorkspaceModel, on_delete=models.CASCADE, null=False, blank=False)
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
|
||||
|
||||
class LeadStep(BaseModel):
|
||||
name = models.CharField(max_length=50)
|
||||
sys_ws = models.ForeignKey(WorkspaceModel, on_delete=models.CASCADE, null=False, blank=False)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class LeadReason(BaseModel):
|
||||
name = models.CharField(max_length=50)
|
||||
success = models.BooleanField(null=True, blank=True)
|
||||
sys_ws = models.ForeignKey(WorkspaceModel, on_delete=models.CASCADE, null=False, blank=False)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class Lead(BaseModel):
|
||||
|
||||
STATUS_CHOICES = {
|
||||
("SU", "OK"),
|
||||
("FA", "FAIL"),
|
||||
("UN", "unknown"),
|
||||
}
|
||||
|
||||
title = models.CharField(max_length=100)
|
||||
desc = models.CharField(max_length=300)
|
||||
customer = models.ForeignKey(CustomerModel, on_delete=models.CASCADE, null=False, blank=False)
|
||||
product_type = models.ForeignKey(ProductTypeModel, on_delete=models.SET_NULL, null=True, blank=True)
|
||||
type = models.ForeignKey(LeadType, on_delete=models.SET_NULL, null=True, blank=True)
|
||||
source = models.ForeignKey(LeadSource, on_delete=models.SET_NULL, null=True, blank=True)
|
||||
step = models.ForeignKey(LeadStep, on_delete=models.SET_NULL, null=True, blank=True)
|
||||
city = models.ForeignKey(CityModel, on_delete=models.SET_NULL, null=True, blank=True)
|
||||
status = models.CharField(max_length=2, choices=STATUS_CHOICES, null=True, blank=True, default='UN')
|
||||
reason = models.ForeignKey(LeadReason, on_delete=models.SET_NULL, null=True, blank=True)
|
||||
cuser_role = models.ForeignKey(CuserRoleModel, on_delete=models.SET_NULL, null=True, blank=True)
|
||||
sys_ws = models.ForeignKey(WorkspaceModel, on_delete=models.CASCADE, null=False, blank=False)
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
|
||||
|
||||
class LeadComment(BaseModel):
|
||||
|
||||
lead = models.ForeignKey(Lead, on_delete=models.CASCADE, null=False, blank=False, related_name='lead_comment')
|
||||
desc = models.CharField(max_length=300)
|
||||
cuser_role = models.ForeignKey(CuserRoleModel, on_delete=models.SET_NULL, null=True, blank=True)
|
||||
sys_ws = models.ForeignKey(WorkspaceModel, on_delete=models.CASCADE, null=False, blank=False)
|
||||
|
||||
class Meta:
|
||||
ordering = ['-created_at']
|
||||
|
||||
def __str__(self):
|
||||
return self.lead.title
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
from apps.lead.models import Lead as LeadModel, LeadType as LeadTypeModel, LeadStep as LeadStepModel
|
||||
from apps.workspace.models import City as CityModel
|
||||
from apps.customer.models import Customer as CustomerModel
|
||||
from apps.shop.models import ProductType as ProductTypeModel
|
||||
from django.core.exceptions import ValidationError
|
||||
from utils.validations import ObjectValidationById
|
||||
|
||||
|
||||
class LeadProxy(LeadModel):
|
||||
|
||||
def full_objects_validation_by_id(self, request):
|
||||
customer = ObjectValidationById(object_model=CustomerModel, request=request).is_valid(self.customer_id)
|
||||
customer = ObjectValidationById(object_model=LeadTypeModel, request=request).is_valid(lead_type_id)
|
||||
|
||||
customer = ObjectValidationById(object_model=CustomerModel, request=request).is_valid(customer_id)
|
||||
customer = ObjectValidationById(object_model=CustomerModel, request=request).is_valid(customer_id)
|
||||
customer = ObjectValidationById(object_model=CustomerModel, request=request).is_valid(customer_id)
|
||||
customer = ObjectValidationById(object_model=CustomerModel, request=request).is_valid(customer_id)
|
||||
return True
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
from apps.lead.models import Lead as LeadModel, LeadType as LeadTypeModel,\
|
||||
LeadSource as LeadSourceModel, LeadStep as LeadStepModel
|
||||
from apps.shop.models import ProductType as ProductTypeModel
|
||||
from apps.workspace.models import City as CityModel
|
||||
from utils.get_user_workspace import get_user_workspace_uuid
|
||||
from utils.get_cuser_role import get_cuser_role_uuid
|
||||
from rest_framework import exceptions
|
||||
|
||||
|
||||
def list_leads(request) -> LeadModel:
|
||||
|
||||
try:
|
||||
workspace_uuid = get_user_workspace_uuid(request)
|
||||
cuser_role_uuid = get_cuser_role_uuid(request)
|
||||
leads = LeadModel.objects.filter(sys_ws__uuid=workspace_uuid, cuser_role__uuid=cuser_role_uuid).order_by('-created_at')
|
||||
|
||||
return leads
|
||||
except Exception as exp:
|
||||
message = f'Error Fetching List Leads: {exp}'
|
||||
raise exceptions.ValidationError({'error': message})
|
||||
|
||||
|
||||
def retrieve_lead(request, id: int) -> LeadModel:
|
||||
|
||||
try:
|
||||
workspace_uuid = get_user_workspace_uuid(request)
|
||||
cuser_role_uuid = get_cuser_role_uuid(request)
|
||||
lead = LeadModel.objects.get(id=id, sys_ws__uuid=workspace_uuid, cuser_role__uuid=cuser_role_uuid)
|
||||
return lead
|
||||
except Exception as exp:
|
||||
message = f'Error retrieve Leads: {exp}'
|
||||
raise exceptions.ValidationError({'error': message})
|
||||
|
||||
|
||||
def retrieve_summary_lead(request) -> LeadModel:
|
||||
|
||||
try:
|
||||
workspace_uuid = get_user_workspace_uuid(request)
|
||||
cuser_role_uuid = get_cuser_role_uuid(request)
|
||||
|
||||
mozakere = LeadModel.objects.filter(step_id=2, status__in=('UN', ''),
|
||||
sys_ws__uuid=workspace_uuid, cuser_role__uuid=cuser_role_uuid)[:20]
|
||||
pish = LeadModel.objects.filter(step_id=3, status__in=('UN', ''),
|
||||
sys_ws__uuid=workspace_uuid, cuser_role__uuid=cuser_role_uuid)[:20]
|
||||
kharid = LeadModel.objects.filter(step_id=4, status__in=('UN', ''),
|
||||
sys_ws__uuid=workspace_uuid, cuser_role__uuid=cuser_role_uuid)[:20]
|
||||
|
||||
leads = {
|
||||
'mozakere': mozakere,
|
||||
'pishfactor': pish,
|
||||
'kharid': kharid,
|
||||
}
|
||||
|
||||
return leads
|
||||
|
||||
except Exception as exp:
|
||||
message = f'Error retrieve summary Leads: {exp}'
|
||||
raise exceptions.ValidationError({'error': message})
|
||||
|
||||
|
||||
def fields_new_lead_form(request):
|
||||
|
||||
workspace_uuid = get_user_workspace_uuid(request)
|
||||
|
||||
lead_type = LeadTypeModel.objects.filter(sys_ws__uuid=workspace_uuid)
|
||||
product_types = ProductTypeModel.objects.filter(sys_ws__uuid=workspace_uuid)
|
||||
lead_source = LeadSourceModel.objects.filter(sys_ws__uuid=workspace_uuid)
|
||||
lead_step = LeadStepModel.objects.filter(sys_ws__uuid=workspace_uuid)
|
||||
shahr = CityModel.objects.filter()
|
||||
|
||||
data = {
|
||||
'product_types': product_types,
|
||||
'lead_types': lead_type,
|
||||
'lead_source': lead_source,
|
||||
'lead_steps': lead_step,
|
||||
'shahr': shahr,
|
||||
}
|
||||
return data
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
from rest_framework import serializers
|
||||
from apps.lead.models import (
|
||||
LeadType as LeadTypeModel, LeadSource as LeadSourceModel,
|
||||
LeadStep as LeadStepModel, LeadReason as LeadReasonModel
|
||||
)
|
||||
from apps.shop.models import ProductType as ProductTypeModel
|
||||
from apps.workspace.models import City as CityModel
|
||||
|
||||
|
||||
|
||||
|
||||
class ProductTypeSerializers(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = ProductTypeModel
|
||||
exclude = ['sys_ws', 'created_at', 'updated_at']
|
||||
|
||||
|
||||
class LeadTypeSerializers(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = LeadTypeModel
|
||||
exclude = ['sys_ws', 'created_at', 'updated_at']
|
||||
|
||||
|
||||
class LeadSourceSerializers(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = LeadSourceModel
|
||||
exclude = ['sys_ws', 'created_at', 'updated_at']
|
||||
|
||||
|
||||
class LeadStepSerializers(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = LeadStepModel
|
||||
exclude = ['sys_ws', 'created_at', 'updated_at']
|
||||
|
||||
|
||||
class LeadReasonSerializers(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = LeadReasonModel
|
||||
exclude = ['sys_ws', 'created_at', 'updated_at']
|
||||
|
||||
|
||||
class ShahrSerializers(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = CityModel
|
||||
exclude = ['created_at', 'updated_at']
|
||||
@@ -0,0 +1,146 @@
|
||||
from apps.lead.models import Lead as LeadModel,\
|
||||
LeadType as LeadTypeModel, LeadStep as LeadStepModel, LeadSource as LeadSourceModel, LeadComment as LeadCommentModel
|
||||
from apps.shop.models import ProductType as ProductTypeModel
|
||||
from utils.get_user_workspace import get_user_workspace
|
||||
from utils.get_cuser_role import get_cuser_role
|
||||
from utils.validations import ObjectValidationById
|
||||
from apps.customer.models import Customer as CustomerModel
|
||||
from apps.workspace.models import City as CityModel
|
||||
from rest_framework import exceptions
|
||||
|
||||
|
||||
def create_new_lead(request, title: str, customer_id: str, desc: str, product_type_id: int,
|
||||
lead_type_id: int, lead_source_id: int, city_id: int, lead_step_id: int) -> LeadModel:
|
||||
try:
|
||||
sys_ws = get_user_workspace(request=request)
|
||||
cuser_role = get_cuser_role(request=request)
|
||||
|
||||
customer = ObjectValidationById(object_model=CustomerModel, request=request).is_valid(int(customer_id))
|
||||
lead_type = ObjectValidationById(object_model=LeadTypeModel, request=request).is_valid(lead_type_id)
|
||||
lead_step = ObjectValidationById(object_model=LeadStepModel, request=request).is_valid(lead_step_id)
|
||||
lead_source = ObjectValidationById(object_model=LeadSourceModel, request=request).is_valid(lead_source_id)
|
||||
product_type = ObjectValidationById(object_model=ProductTypeModel, request=request).is_valid(product_type_id)
|
||||
city = ObjectValidationById(object_model=CityModel, request=request).is_valid(city_id)
|
||||
|
||||
new_lead = LeadModel()
|
||||
new_lead.title = title
|
||||
new_lead.customer = customer
|
||||
new_lead.desc = desc
|
||||
new_lead.type = lead_type
|
||||
new_lead.step = lead_step
|
||||
new_lead.source = lead_source
|
||||
new_lead.product_type = product_type
|
||||
new_lead.city = city
|
||||
new_lead.sys_ws = sys_ws
|
||||
new_lead.cuser_role = cuser_role
|
||||
|
||||
new_lead.save()
|
||||
|
||||
return new_lead
|
||||
|
||||
except Exception as exp:
|
||||
print("error creae lead")
|
||||
message = f'Error Create New Lead: {exp}'
|
||||
raise exceptions.ValidationError({'error': message})
|
||||
|
||||
|
||||
def update_lead(request, lead_id: int, title: str, customer_id: str, desc: str, product_type_id: int,
|
||||
lead_type_id: int, lead_source_id: int, city_id: int, lead_step_id: int) -> LeadModel:
|
||||
try:
|
||||
sys_ws = get_user_workspace(request=request)
|
||||
cuser_role = get_cuser_role(request=request)
|
||||
|
||||
customer = ObjectValidationById(object_model=CustomerModel, request=request).is_valid(int(customer_id))
|
||||
lead_type = ObjectValidationById(object_model=LeadTypeModel, request=request).is_valid(lead_type_id)
|
||||
lead_step = ObjectValidationById(object_model=LeadStepModel, request=request).is_valid(lead_step_id)
|
||||
lead_source = ObjectValidationById(object_model=LeadSourceModel, request=request).is_valid(lead_source_id)
|
||||
product_type = ObjectValidationById(object_model=ProductTypeModel, request=request).is_valid(product_type_id)
|
||||
city = ObjectValidationById(object_model=CityModel, request=request).is_valid(city_id)
|
||||
|
||||
lead = LeadModel.objects.get(id=lead_id, sys_ws=sys_ws, cuser_role=cuser_role)
|
||||
lead.title = title
|
||||
lead.customer = customer
|
||||
lead.desc = desc
|
||||
lead.type = lead_type
|
||||
lead.step = lead_step
|
||||
lead.source = lead_source
|
||||
lead.product_type = product_type
|
||||
lead.city = city
|
||||
|
||||
lead.save()
|
||||
|
||||
return lead
|
||||
|
||||
except Exception as exp:
|
||||
message = f'Error Update Lead: {exp}'
|
||||
raise exceptions.ValidationError({'error': message})
|
||||
|
||||
|
||||
def update_lead_status(request, lead_id: int, status: str) -> LeadModel:
|
||||
try:
|
||||
sys_ws = get_user_workspace(request=request)
|
||||
cuser_role = get_cuser_role(request=request)
|
||||
|
||||
lead = LeadModel.objects.get(id=lead_id, sys_ws=sys_ws, cuser_role=cuser_role)
|
||||
lead.status = status
|
||||
|
||||
lead.save()
|
||||
|
||||
return lead
|
||||
|
||||
except Exception as exp:
|
||||
message = f'Error Update Lead Status: {exp}'
|
||||
raise exceptions.ValidationError({'error': message})
|
||||
|
||||
|
||||
def update_lead_comment(request, lead_comment_id: int, desc: str) -> LeadModel:
|
||||
try:
|
||||
sys_ws = get_user_workspace(request=request)
|
||||
cuser_role = get_cuser_role(request=request)
|
||||
|
||||
lead_comment = LeadCommentModel.objects.get(id=lead_comment_id, sys_ws=sys_ws, cuser_role=cuser_role)
|
||||
lead_comment.desc = desc
|
||||
|
||||
lead_comment.save()
|
||||
|
||||
return lead_comment
|
||||
|
||||
except Exception as exp:
|
||||
message = f'Error Update Lead_comment: {exp}'
|
||||
raise exceptions.ValidationError({'error': message})
|
||||
|
||||
|
||||
def create_lead_comment(request, lead_id, desc: str) -> LeadCommentModel:
|
||||
try:
|
||||
sys_ws = get_user_workspace(request=request)
|
||||
cuser_role = get_cuser_role(request=request)
|
||||
|
||||
lead_comment = LeadCommentModel()
|
||||
lead_comment.lead = LeadModel.objects.get(id=lead_id, sys_ws=sys_ws, cuser_role=cuser_role)
|
||||
lead_comment.sys_ws = sys_ws
|
||||
lead_comment.cuser_role = cuser_role
|
||||
lead_comment.desc = desc
|
||||
lead_comment.save()
|
||||
|
||||
return lead_comment
|
||||
|
||||
except Exception as exp:
|
||||
message = f'Error Create Lead comment: {exp}'
|
||||
raise exceptions.ValidationError({'error': message})
|
||||
|
||||
|
||||
def delete_lead_comment(request, lead_comment_id: int) -> LeadModel:
|
||||
try:
|
||||
sys_ws = get_user_workspace(request=request)
|
||||
cuser_role = get_cuser_role(request=request)
|
||||
|
||||
lead_comment = LeadCommentModel.objects.get(id=lead_comment_id, sys_ws=sys_ws, cuser_role=cuser_role)
|
||||
lead_comment.delete()
|
||||
|
||||
return lead_comment
|
||||
|
||||
except Exception as exp:
|
||||
message = f'Error Delete Lead_comment: {exp}'
|
||||
raise exceptions.ValidationError({'error': message})
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
@@ -0,0 +1,17 @@
|
||||
from django.urls import path, include
|
||||
from apps.lead.views import *
|
||||
|
||||
urlpatterns = [
|
||||
path('form-items/', LeadFormItemsApi.as_view(), name='lead-form-items'),
|
||||
path('new/', LeadCreateApi.as_view(), name='lead-new'),
|
||||
path('list/', LeadListApi.as_view(), name='lead-list'),
|
||||
path('<int:lead_id>/', LeadRetrieveApi.as_view(), name='lead-id'),
|
||||
path('<int:lead_id>/edit-status/', LeadUpdateStatusApi.as_view(), name='lead-edit-status'),
|
||||
path('<int:lead_id>/edit/', LeadUpdateApi.as_view(), name='lead-edit'),
|
||||
path('<int:lead_id>/comment/add/', LeadCommentCreateApi.as_view(), name='lead-comment-add'),
|
||||
path('comment/<int:lead_comment_id>/edit/', LeadCommentUpdateApi.as_view(), name='lead-comment-edit'),
|
||||
path('comment/<int:lead_comment_id>/delete/', LeadCommentDeleteApi.as_view(), name='lead-comment-delete'),
|
||||
|
||||
path('summary/', LeadSummaryApi.as_view(), name='marketing-summary'),
|
||||
|
||||
]
|
||||
@@ -0,0 +1,318 @@
|
||||
from django.shortcuts import render
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.generics import ListAPIView
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import serializers
|
||||
from apps.lead.serializers import LeadTypeSerializers, ProductTypeSerializers,\
|
||||
LeadSourceSerializers, LeadStepSerializers, ShahrSerializers
|
||||
from apps.lead.selectors import fields_new_lead_form
|
||||
from apps.lead.services import create_new_lead, update_lead, update_lead_status,\
|
||||
update_lead_comment, delete_lead_comment, create_lead_comment
|
||||
from apps.lead.models import Lead as LeadModel
|
||||
from rest_framework import status
|
||||
from apps.lead.selectors import list_leads, retrieve_lead, retrieve_summary_lead
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from utils import custom_permissions
|
||||
from utils.tools import inline_serializer
|
||||
from utils.pagination import CustomPagination
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
# Create your views here.
|
||||
|
||||
|
||||
class LeadFormItemsApi(APIView):
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
lead_types = LeadTypeSerializers(many=True)
|
||||
product_types = ProductTypeSerializers(many=True)
|
||||
lead_source = LeadSourceSerializers(many=True)
|
||||
lead_steps = LeadStepSerializers(many=True)
|
||||
shahr = ShahrSerializers(many=True)
|
||||
|
||||
def get(self, request):
|
||||
|
||||
fields_value = fields_new_lead_form(request)
|
||||
serializer = self.OutputSerializer(fields_value)
|
||||
|
||||
return Response(data=serializer.data)
|
||||
|
||||
|
||||
class LeadCreateApi(APIView):
|
||||
|
||||
class InputSerializer(serializers.Serializer):
|
||||
title = serializers.CharField(max_length=100, required=True)
|
||||
customer_id = serializers.IntegerField(required=True)
|
||||
desc = serializers.CharField(max_length=200, required=True)
|
||||
lead_type_id = serializers.IntegerField(required=True)
|
||||
product_type_id = serializers.IntegerField(required=True)
|
||||
lead_source_id = serializers.IntegerField(required=True)
|
||||
lead_step_id = serializers.IntegerField(required=True)
|
||||
city_id = serializers.IntegerField(required=True)
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(required=True)
|
||||
|
||||
def post(self, request):
|
||||
|
||||
serializer = self.InputSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
new_lead = create_new_lead(request=request, **serializer.validated_data)
|
||||
|
||||
output = self.OutputSerializer(new_lead)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_201_CREATED)
|
||||
|
||||
|
||||
class LeadUpdateApi(APIView):
|
||||
|
||||
class InputSerializer(serializers.Serializer):
|
||||
title = serializers.CharField(max_length=100, required=True)
|
||||
customer_id = serializers.IntegerField(required=True)
|
||||
desc = serializers.CharField(max_length=200, required=True)
|
||||
lead_type_id = serializers.IntegerField(required=True)
|
||||
product_type_id = serializers.IntegerField(required=True)
|
||||
lead_source_id = serializers.IntegerField(required=True)
|
||||
lead_step_id = serializers.IntegerField(required=True)
|
||||
city_id = serializers.IntegerField(required=True)
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(required=True)
|
||||
|
||||
def patch(self, request, lead_id):
|
||||
|
||||
serializer = self.InputSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
lead = update_lead(request=request, lead_id=lead_id, **serializer.validated_data)
|
||||
|
||||
output = self.OutputSerializer(lead)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_201_CREATED)
|
||||
|
||||
|
||||
class LeadUpdateStatusApi(APIView):
|
||||
|
||||
class InputSerializer(serializers.Serializer):
|
||||
status = serializers.CharField(max_length=2, required=True)
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(required=True)
|
||||
|
||||
def patch(self, request, lead_id):
|
||||
|
||||
serializer = self.InputSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
lead = update_lead_status(request=request, lead_id=lead_id, **serializer.validated_data)
|
||||
|
||||
output = self.OutputSerializer(lead)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_201_CREATED)
|
||||
|
||||
|
||||
class LeadListApi(ListAPIView):
|
||||
|
||||
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission)
|
||||
|
||||
class Pagination(CustomPagination):
|
||||
page_size = 10
|
||||
page_size_query_param = 'page_size'
|
||||
max_page_size = 20
|
||||
|
||||
class OutputSerializer(serializers.ModelSerializer):
|
||||
|
||||
customer = inline_serializer(many=False, fields={'name_family': serializers.CharField(), })
|
||||
|
||||
product_type = inline_serializer(many=False, fields={'name': serializers.CharField(), })
|
||||
|
||||
type = inline_serializer(many=False, fields={'title': serializers.CharField(), })
|
||||
|
||||
source = inline_serializer(many=False, fields={'title': serializers.CharField(), })
|
||||
|
||||
step = inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name': serializers.CharField(),
|
||||
})
|
||||
|
||||
city = inline_serializer(many=False, fields={
|
||||
'name': serializers.CharField(),
|
||||
'ostan': inline_serializer(many=False, fields={'name': serializers.CharField() })
|
||||
})
|
||||
|
||||
class Meta:
|
||||
model = LeadModel
|
||||
fields = '__all__'
|
||||
|
||||
serializer_class = OutputSerializer
|
||||
pagination_class = Pagination
|
||||
|
||||
filter_backends = [DjangoFilterBackend]
|
||||
filterset_fields = ['step', 'status', ]
|
||||
|
||||
def get_queryset(self):
|
||||
return list_leads(request=self.request)
|
||||
|
||||
|
||||
class LeadRetrieveApi(APIView):
|
||||
|
||||
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission)
|
||||
|
||||
class OutputSerializer(serializers.ModelSerializer):
|
||||
|
||||
customer = inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name_family': serializers.CharField(),
|
||||
})
|
||||
|
||||
product_type = inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name': serializers.CharField(),
|
||||
})
|
||||
|
||||
type = inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'title': serializers.CharField(),
|
||||
})
|
||||
|
||||
source = inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'title': serializers.CharField(),
|
||||
})
|
||||
|
||||
step = inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name': serializers.CharField(),
|
||||
})
|
||||
|
||||
city = inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name': serializers.CharField(),
|
||||
'ostan': inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name': serializers.CharField()
|
||||
})
|
||||
})
|
||||
|
||||
lead_comment = inline_serializer(many=True, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'created_at': serializers.DateTimeField(),
|
||||
'desc': serializers.CharField()
|
||||
})
|
||||
|
||||
lead_reminder = inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'created_at': serializers.DateTimeField(),
|
||||
'datetime': serializers.DateTimeField(),
|
||||
'desc': serializers.CharField()
|
||||
})
|
||||
|
||||
class Meta:
|
||||
model = LeadModel
|
||||
fields = '__all__'
|
||||
|
||||
serializer_class = OutputSerializer
|
||||
|
||||
def get(self, request, lead_id):
|
||||
|
||||
lead = retrieve_lead(request=request, id=lead_id)
|
||||
output = self.OutputSerializer(lead, many=False)
|
||||
|
||||
return Response(data=output.data)
|
||||
|
||||
|
||||
class LeadCommentCreateApi(APIView):
|
||||
|
||||
class InputSerializer(serializers.Serializer):
|
||||
desc = serializers.CharField(max_length=200, required=True)
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(required=True)
|
||||
|
||||
def post(self, request, lead_id):
|
||||
|
||||
serializer = self.InputSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
lead = create_lead_comment(request=request, lead_id=lead_id, **serializer.validated_data)
|
||||
|
||||
output = self.OutputSerializer(lead)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class LeadCommentUpdateApi(APIView):
|
||||
|
||||
class InputSerializer(serializers.Serializer):
|
||||
desc = serializers.CharField(max_length=200, required=True)
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(required=True)
|
||||
|
||||
def patch(self, request, lead_comment_id):
|
||||
|
||||
serializer = self.InputSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
lead = update_lead_comment(request=request, lead_comment_id=lead_comment_id, **serializer.validated_data)
|
||||
|
||||
output = self.OutputSerializer(lead)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class LeadCommentDeleteApi(APIView):
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(required=True)
|
||||
|
||||
def delete(self, request, lead_comment_id):
|
||||
|
||||
lead = delete_lead_comment(request=request, lead_comment_id=lead_comment_id)
|
||||
|
||||
output = self.OutputSerializer(lead)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class LeadSummaryApi(APIView):
|
||||
|
||||
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission)
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
|
||||
mozakere = inline_serializer(many=True, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'customer': inline_serializer(fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name_family': serializers.CharField(),
|
||||
}),
|
||||
'title': serializers.CharField(),
|
||||
'created_at': serializers.DateTimeField()
|
||||
})
|
||||
|
||||
pishfactor = inline_serializer(many=True, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'customer': inline_serializer(fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name_family': serializers.CharField(),
|
||||
}),
|
||||
'title': serializers.CharField(),
|
||||
'created_at': serializers.DateTimeField()
|
||||
})
|
||||
|
||||
kharid = inline_serializer(many=True, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'customer': inline_serializer(fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name_family': serializers.CharField(),
|
||||
}),
|
||||
'title': serializers.CharField(),
|
||||
'created_at': serializers.DateTimeField()
|
||||
})
|
||||
|
||||
def get(self, request):
|
||||
|
||||
leads = retrieve_summary_lead(request=request)
|
||||
output = self.OutputSerializer(leads, many=False)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_200_OK)
|
||||
Reference in new issue
Block a user