Enhancements (#10)
* accounts section code updated and functionality issues fixed * updated all modules from app
This commit is contained in:
parent
df214d9425
commit
07caee661b
31 changed files with 2370 additions and 4214 deletions
|
|
@ -1,7 +1,7 @@
|
|||
from django.test import TestCase
|
||||
from common.models import *
|
||||
from accounts.models import Account
|
||||
from common.models import User
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
|
||||
# Create your tests here.
|
||||
|
|
@ -9,17 +9,18 @@ from common.models import User
|
|||
|
||||
class AccountCreateTest(object):
|
||||
def setUp(self):
|
||||
self.user = User.objects.create(username='uday', email='u@mp.com')
|
||||
self.user.set_password('uday2293')
|
||||
self.user.save()
|
||||
|
||||
self.country = Country.objects.create(
|
||||
iso_3166_1_a2="IN", iso_3166_1_a3="IND", iso_3166_1_numeric="01", printable_name="INDIA", name="INDIA", is_shipping_country="True")
|
||||
self.address = Address.objects.create(
|
||||
street="KPHB", city="HYDERABAD", state="ANDHRA PRADESH", postcode="500073", country='IN')
|
||||
street="KPHB", city="HYDERABAD", state="ANDHRA PRADESH", postcode="500073", country=Country.objects.get(pk=1))
|
||||
self.account = Account.objects.create(
|
||||
name="Uday", email="udayteja@micropyramid.com", phone="8333855552", billing_address=self.address,
|
||||
shipping_address=self.address, website="www.uday.com", created_by=self.user,
|
||||
industry="SOFTWARE", description="Yes.. Testing Done")
|
||||
self.client.login(email='u@mp.com', password='uday2293')
|
||||
shipping_address=self.address, website="www.uday.com", account_type="PARTNER",
|
||||
sis_code="UDAYMP2016", industry="SOFTWARE", description="Yes.. Testing Done")
|
||||
self.user = User.objects.create(username='uday')
|
||||
self.user.set_password('uday2293')
|
||||
self.user.save()
|
||||
self.client.login(username='uday', password='uday2293')
|
||||
|
||||
|
||||
class AccountsCreateUrlTestCase(AccountCreateTest, TestCase):
|
||||
|
|
@ -27,7 +28,7 @@ class AccountsCreateUrlTestCase(AccountCreateTest, TestCase):
|
|||
response = self.client.get('/accounts/create/', {
|
||||
'name': "Uday", 'email': "udayteja@micropyramid.com", 'phone': "", 'billing_address': self.address,
|
||||
'shipping_address': self.address, 'website': "www.uday.com", 'account_type': "PARTNER",
|
||||
'industry': "SOFTWARE", 'description': "Yes.. Testing Done"})
|
||||
'sis_code': "UDAYMP2016", 'industry': "SOFTWARE", 'description': "Yes.. Testing Done"})
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_account_create_html(self):
|
||||
|
|
@ -62,7 +63,7 @@ class AccountsViewTestCase(AccountCreateTest, TestCase):
|
|||
self.accounts = Account.objects.all()
|
||||
response = self.client.get('/accounts/1/view/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['account_record'].id, 1)
|
||||
self.assertEqual(response.context['ac'].id, 1)
|
||||
self.assertTemplateUsed(response, 'accounts/view_account.html')
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -3,32 +3,34 @@ from cases.models import Case
|
|||
from contacts.models import Contact
|
||||
from accounts.models import Account
|
||||
from django.test import Client
|
||||
from common.models import Address
|
||||
from common.models import Country, Address
|
||||
from django.core.urlresolvers import reverse
|
||||
from common.models import User
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
|
||||
class CaseCreation(object):
|
||||
def setUp(self):
|
||||
self.country = Country.objects.create(iso_3166_1_a2="IN", iso_3166_1_a3="IN", iso_3166_1_numeric="IN",
|
||||
printable_name="India",
|
||||
name="India", is_shipping_country="True")
|
||||
self.address = Address.objects.create(street="6th phase", city="hyderabad", postcode="506344",
|
||||
country='IN')
|
||||
self.user = User.objects.create(username='raghu', email='r@mp.com')
|
||||
self.user.set_password('raghu')
|
||||
self.user.save()
|
||||
|
||||
country=Country.objects.get(pk=1))
|
||||
self.account = Account.objects.create(name="account", email="account@gmail.com", phone="12345",
|
||||
billing_address=self.address, shipping_address=self.address,
|
||||
website="www.account.com",
|
||||
industry="IT",
|
||||
description="account", created_by=self.user)
|
||||
self.contacts = Contact.objects.create(first_name="contact",
|
||||
account_type="account", sis_code="12345", industry="IT",
|
||||
description="account")
|
||||
self.contacts = Contact.objects.create(name="contact",
|
||||
email="contact@gmail.com", phone="12345",
|
||||
account=self.account, description="contact", address=self.address, created_by=self.user)
|
||||
account=self.account, description="contact", address=self.address)
|
||||
# self.comment = Comments.objects.create(comment="new", caseid=self.case.id, comment_)
|
||||
self.client.login(email='r@mp.com', password='raghu')
|
||||
self.user = User.objects.create(username='raghu')
|
||||
self.user.set_password('raghu')
|
||||
self.user.save()
|
||||
self.client.login(username='raghu', password='raghu')
|
||||
self.case = Case.objects.create(name="raghu", case_type="Problem", status="New", account=self.account,
|
||||
priority="Low", description="something", teams="Sales",
|
||||
created_by=self.user)
|
||||
userid=User.objects.get(pk=1))
|
||||
|
||||
|
||||
class CaseCreateTestCase(CaseCreation, TestCase):
|
||||
|
|
|
|||
|
|
@ -1,10 +1,5 @@
|
|||
from django import forms
|
||||
from common.models import Address
|
||||
from oppurtunity.models import Opportunity
|
||||
from cases.models import Case
|
||||
from leads.models import Lead
|
||||
from contacts.models import Contact
|
||||
from accounts.models import Account
|
||||
|
||||
|
||||
class BillingAddressForm(forms.ModelForm):
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
from django.test import TestCase
|
||||
from django.test import Client
|
||||
from common.models import User
|
||||
from common.forms import PersonForm
|
||||
from common.models import Person
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
|
||||
class TestHomePage(TestCase):
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ from django.contrib.auth import logout, authenticate, login
|
|||
|
||||
|
||||
|
||||
# @login_required
|
||||
@login_required
|
||||
def home(request):
|
||||
return render(request, 'index.html')
|
||||
|
||||
|
|
|
|||
|
|
@ -1,35 +1,44 @@
|
|||
from django import forms
|
||||
from contacts.models import Contact
|
||||
from common.models import Comment
|
||||
from common.models import Address
|
||||
|
||||
|
||||
class AddressForm(forms.ModelForm):
|
||||
|
||||
class Meta:
|
||||
|
||||
model = Address
|
||||
fields = ('street', 'city', 'state', 'postcode', 'country')
|
||||
|
||||
|
||||
class ContactForm(forms.ModelForm):
|
||||
|
||||
class Meta:
|
||||
def __init__(self, *args, **kwargs):
|
||||
assigned_users = kwargs.pop('assigned_to', [])
|
||||
contact_account = kwargs.pop('account', [])
|
||||
super(ContactForm, self).__init__(*args, **kwargs)
|
||||
for field in self.fields.values():
|
||||
field.widget.attrs = {"class": "form-control"}
|
||||
self.fields['description'].widget.attrs.update({
|
||||
'rows': '6'})
|
||||
self.fields['assigned_to'].queryset = assigned_users
|
||||
self.fields['account'].queryset = contact_account
|
||||
self.fields['assigned_to'].required = False
|
||||
self.fields['teams'].required = False
|
||||
|
||||
class Meta:
|
||||
model = Contact
|
||||
fields = ('first_name', 'last_name', 'account', 'email', 'teams', 'assigned_to', 'phone', 'description')
|
||||
fields = (
|
||||
'assigned_to', 'teams', 'first_name', 'last_name', 'account', 'email', 'phone', 'address', 'description'
|
||||
)
|
||||
|
||||
def clean_phone(self):
|
||||
a = len(self.data.get("phone"))
|
||||
if (a >= 10 and a <= 12):
|
||||
return self.data.get("phone")
|
||||
else:
|
||||
raise forms.ValidationError("Phone number must be Minimum of 10 Digits and Maximum of 12 Digits")
|
||||
client_phone = self.cleaned_data.get('phone', None)
|
||||
try:
|
||||
if int(client_phone) and not client_phone.isalpha():
|
||||
ph_length = str(client_phone)
|
||||
if len(ph_length) < 10 or len(ph_length) > 13:
|
||||
raise forms.ValidationError('Phone number must be minimum 10 Digits and maximum of 13 Digits')
|
||||
except (ValueError):
|
||||
raise forms.ValidationError('Phone Number should contain only Numbers')
|
||||
return client_phone
|
||||
|
||||
|
||||
class CommentForm(forms.ModelForm):
|
||||
class ContactCommentForm(forms.ModelForm):
|
||||
comment = forms.CharField(max_length=64, required=True)
|
||||
|
||||
class Meta:
|
||||
model = Comment
|
||||
fields = ('comment', 'commented_by', 'contact')
|
||||
fields = ('comment', 'contact', 'commented_by')
|
||||
|
|
|
|||
|
|
@ -1,103 +1,103 @@
|
|||
from django.test import TestCase
|
||||
from contacts.models import Contact
|
||||
from accounts.models import Account
|
||||
from common.models import Address
|
||||
from common.models import User
|
||||
from django.test import Client
|
||||
from django.core.urlresolvers import reverse
|
||||
# from django.test import TestCase
|
||||
# from contacts.models import Contact
|
||||
# from accounts.models import Account
|
||||
# from common.models import Address, Country
|
||||
# from django.contrib.auth.models import User
|
||||
# from django.test import Client
|
||||
# from django.core.urlresolvers import reverse
|
||||
|
||||
|
||||
class ContactObjectsCreation(object):
|
||||
def setUp(self):
|
||||
self.client = Client()
|
||||
self.user = User.objects.create_superuser('user@micropyramid.com', 'username', 'password')
|
||||
user_login = self.client.login(username='user@micropyramid.com',
|
||||
password='password')
|
||||
|
||||
self.address = Address.objects.create(street="kphb 5th phase", city="hyd", state="telanagana", postcode=502279, country='IN')
|
||||
self.account = Account.objects.create(name="account", email="account@gmail.com", phone="12345", billing_address=Address.objects.get(pk=1), shipping_address=Address.objects.get(pk=1), website="account.com", industry="IT", description="account", created_by=self.user)
|
||||
self.contact = Contact.objects.create(first_name="contact", email="contact@gmail.com", phone="12345", account=Account.objects.get(pk=1), address=Address.objects.get(pk=1), description="contact", created_by=self.user)
|
||||
# class ContactObjectsCreation(object):
|
||||
# def setUp(self):
|
||||
# self.client = Client()
|
||||
# self.country = Country.objects.create(iso_3166_1_a2=67, iso_3166_1_a3=87, iso_3166_1_numeric=456, printable_name="russia", name="Russia", is_shipping_country="True")
|
||||
# self.address = Address.objects.create(street="kphb 5th phase", city="hyd", state="telanagana", postcode=502279, country=(Country.objects.get(pk=1)))
|
||||
# self.account = Account.objects.create(name="account", email="account@gmail.com", phone="12345", billing_address=Address.objects.get(pk=1), shipping_address=Address.objects.get(pk=1), website="account.com", account_type="account", sis_code="12345", industry="IT", description="account")
|
||||
# self.contact = Contact.objects.create(name="contact", email="contact@gmail.com", phone="12345", account=Account.objects.get(pk=1), address=Address.objects.get(pk=1), description="contact" )
|
||||
# self.user = User.objects.create_superuser('user@micropyramid.com', 'username', 'password')
|
||||
# user_login = self.client.login(username='user@micropyramid.com',
|
||||
# password='password')
|
||||
|
||||
|
||||
class ContactObjectsCreation_Count(ContactObjectsCreation, TestCase):
|
||||
def test_contact_object_creation(self):
|
||||
c = Contact.objects.count()
|
||||
self.assertEqual(c, 1)
|
||||
# class ContactObjectsCreation_Count(ContactObjectsCreation, TestCase):
|
||||
# def test_contact_object_creation(self):
|
||||
# c = Contact.objects.count()
|
||||
# self.assertEqual(c, 1)
|
||||
|
||||
def test_account_object_creation(self):
|
||||
c = Account.objects.count()
|
||||
self.assertEqual(c, 1)
|
||||
# def test_account_object_creation(self):
|
||||
# c = Account.objects.count()
|
||||
# self.assertEqual(c, 1)
|
||||
|
||||
def test_address_object_creation(self):
|
||||
c = Address.objects.count()
|
||||
self.assertEqual(c, 1)
|
||||
# def test_address_object_creation(self):
|
||||
# c = Address.objects.count()
|
||||
# self.assertEqual(c, 1)
|
||||
|
||||
|
||||
class ContactObjectsCreation_id(ContactObjectsCreation, TestCase):
|
||||
# class ContactObjectsCreation_id(ContactObjectsCreation, TestCase):
|
||||
|
||||
def test_create_contacts(self):
|
||||
self.assertEqual(self.contact.id, 1)
|
||||
# def test_create_contacts(self):
|
||||
# self.assertEqual(self.contact.id, 1)
|
||||
|
||||
def test_create_accounts(self):
|
||||
self.assertEqual(self.account.id, 1)
|
||||
# def test_create_accounts(self):
|
||||
# self.assertEqual(self.account.id, 1)
|
||||
|
||||
def test_create_address(self):
|
||||
self.assertEqual(self.address.id, 1)
|
||||
# def test_create_address(self):
|
||||
# self.assertEqual(self.address.id, 1)
|
||||
|
||||
|
||||
class ContactViewsTestCase(ContactObjectsCreation, TestCase):
|
||||
# class ContactViewsTestCase(ContactObjectsCreation, TestCase):
|
||||
|
||||
def test_contacts_list_page(self):
|
||||
response = self.client.get('/contacts/list/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
if response.status_code == 200:
|
||||
self.contacts = Contact.objects.all()
|
||||
self.assertEqual(response.context['contacts'][0].id, self.contact.id)
|
||||
self.assertTrue(response.context['contacts'])
|
||||
# def test_contacts_list_page(self):
|
||||
# response = self.client.get('/contacts/list/')
|
||||
# self.assertEqual(response.status_code, 200)
|
||||
# if response.status_code == 200:
|
||||
# self.contacts = Contact.objects.all()
|
||||
# self.assertEqual(response.context['contacts'][0].id, self.contact.id)
|
||||
# self.assertTrue(response.context['contacts'])
|
||||
|
||||
def test_contacts_list_html(self):
|
||||
response = self.client.get('/contacts/list/')
|
||||
self.assertTemplateUsed(response, 'contacts/contacts.html')
|
||||
# def test_contacts_list_html(self):
|
||||
# response = self.client.get('/contacts/list/')
|
||||
# self.assertTemplateUsed(response, 'contacts/contacts.html')
|
||||
|
||||
def test_contacts_create(self):
|
||||
response = self.client.post('/contacts/create/', {
|
||||
'name': 'contact', 'email': 'contact@gmail.com', 'phone': '12345',
|
||||
'account': self.account.id, 'address': self.address, 'description': 'contact'})
|
||||
self.assertEqual(response.status_code, 200)
|
||||
# def test_contacts_create(self):
|
||||
# response = self.client.post('/contacts/create/', {
|
||||
# 'name': 'contact', 'email': 'contact@gmail.com', 'phone': '12345',
|
||||
# 'account': self.account.id, 'address': self.address, 'description': 'contact'})
|
||||
# self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_contacts_create_html(self):
|
||||
response = self.client.post('/contacts/create/', {
|
||||
'name': 'contact', 'email': 'contact@gmail.com', 'phone': '12345',
|
||||
'account': self.account.id, 'address': self.address, 'description': 'contact'})
|
||||
self.assertTemplateUsed(response, 'contacts/create_contact.html')
|
||||
# def test_contacts_create_html(self):
|
||||
# response = self.client.post('/contacts/create/', {
|
||||
# 'name': 'contact', 'email': 'contact@gmail.com', 'phone': '12345',
|
||||
# 'account': self.account.id, 'address': self.address, 'description': 'contact'})
|
||||
# self.assertTemplateUsed(response, 'contacts/create_contact.html')
|
||||
|
||||
def test_contacts_delete(self):
|
||||
Contact.objects.filter(id=self.contact.id).delete()
|
||||
response = self.client.get(reverse("contacts:list"))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
# def test_contacts_delete(self):
|
||||
# Contact.objects.filter(id=self.contact.id).delete()
|
||||
# response = self.client.get(reverse("contacts:list"))
|
||||
# self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_contacts_delete_location_checking(self):
|
||||
response = self.client.post('/contacts/1/delete/')
|
||||
self.assertEqual(response['location'], '/contacts/list/')
|
||||
# def test_contacts_delete_location_checking(self):
|
||||
# response = self.client.post('/contacts/1/delete/')
|
||||
# self.assertEqual(response['location'], '/contacts/list/')
|
||||
|
||||
def test_contacts_edit(self):
|
||||
response = self.client.post('/contacts/1/edit/', {
|
||||
'name': 'priya', 'email': 'contact@gmail.com', 'phone': '12345',
|
||||
'pk': 1, 'account': self.account.id, 'address': self.address.id})
|
||||
self.assertEqual(response.status_code, 200)
|
||||
# def test_contacts_edit(self):
|
||||
# response = self.client.post('/contacts/1/edit/', {
|
||||
# 'name': 'priya', 'email': 'contact@gmail.com', 'phone': '12345',
|
||||
# 'pk': 1, 'account': self.account.id, 'address': self.address.id})
|
||||
# self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_contacts_edit_html(self):
|
||||
response = self.client.post('/contacts/1/edit/', {
|
||||
'name': 'priya', 'email': 'contact@gmail.com', 'phone': '12345',
|
||||
'pk': 1, 'account': self.account.id, 'address': self.address.id})
|
||||
self.assertTemplateUsed(response, 'contacts/create_contact.html')
|
||||
# def test_contacts_edit_html(self):
|
||||
# response = self.client.post('/contacts/1/edit/', {
|
||||
# 'name': 'priya', 'email': 'contact@gmail.com', 'phone': '12345',
|
||||
# 'pk': 1, 'account': self.account.id, 'address': self.address.id})
|
||||
# self.assertTemplateUsed(response, 'contacts/create_contact.html')
|
||||
|
||||
def test_contacts_view(self):
|
||||
self.contacts = Contact.objects.all()
|
||||
response = self.client.get('/contacts/1/view/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['con'].id, 1)
|
||||
# def test_contacts_view(self):
|
||||
# self.contacts = Contact.objects.all()
|
||||
# response = self.client.get('/contacts/1/view/')
|
||||
# self.assertEqual(response.status_code, 200)
|
||||
# self.assertEqual(response.context['con'].id, 1)
|
||||
|
||||
def test_contacts_view_html(self):
|
||||
response = self.client.get('/contacts/1/view/')
|
||||
self.assertTemplateUsed(response, 'contacts/view_contact.html')
|
||||
# def test_contacts_view_html(self):
|
||||
# response = self.client.get('/contacts/1/view/')
|
||||
# self.assertTemplateUsed(response, 'contacts/view_contact.html')
|
||||
|
|
|
|||
|
|
@ -1,17 +1,18 @@
|
|||
from django.conf.urls import url
|
||||
from .import views
|
||||
from contacts import views
|
||||
|
||||
app_name = 'contacts'
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^list/$', views.display_contact, name='list'),
|
||||
url(r'^list/$', views.contacts_list, name='list'),
|
||||
url(r'^create/$', views.add_contact, name='add_contact'),
|
||||
url(r'^(?P<contact_id>\d+)/view/$', views.view_contact, name='view_contact'),
|
||||
url(r'^(?P<pk>\d+)/edit/$', views.edit_contact, name='edit_contact'),
|
||||
url(r'^(?P<pk>\d+)/delete/$', views.delete_contact, name='delete_contact'),
|
||||
url(r'^(?P<pk>\d+)/view/$', views.view_contact, name='view_contact'),
|
||||
url(r'^comment_create/$', views.comment_add, name='comment_add'),
|
||||
url(r'^comment_edit/$', views.comment_edit, name='comment_edit'),
|
||||
url(r'^comment_remove/$', views.comment_remove, name='comment_remove'),
|
||||
url(r'^(?P<pk>\d+)/delete/$', views.remove_contact, name='remove_contact'),
|
||||
url(r'^get/list/$', views.get_contacts, name='get_contacts'),
|
||||
# comments
|
||||
url(r'^comment/add/$', views.add_comment, name='add_comment'),
|
||||
url(r'^comment/edit/$', views.edit_comment, name='edit_comment'),
|
||||
url(r'^comment/remove/$', views.remove_comment, name='remove_comment'),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,172 +1,193 @@
|
|||
from django.shortcuts import render, get_object_or_404
|
||||
from django.http import HttpResponseRedirect, HttpResponse, JsonResponse
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.models import User
|
||||
from django.urls import reverse
|
||||
from common.models import Address, Comment, Team
|
||||
|
||||
from common.models import User, Address, Comment, Team
|
||||
from common.forms import BillingAddressForm
|
||||
from common.utils import COUNTRIES
|
||||
from accounts.models import Account
|
||||
from oppurtunity.models import Opportunity, STAGES, SOURCES
|
||||
from cases.models import Case
|
||||
from contacts.forms import ContactForm, CommentForm, AddressForm
|
||||
from contacts.models import Contact
|
||||
from planner.models import Event
|
||||
from contacts.forms import ContactForm, ContactCommentForm
|
||||
|
||||
|
||||
# CRUD Operations Start
|
||||
|
||||
|
||||
@login_required
|
||||
def contacts_list(request):
|
||||
contact_obj_list = Contact.objects.all()
|
||||
accounts = Account.objects.all()
|
||||
page = request.POST.get('per_page')
|
||||
first_name = request.POST.get('first_name')
|
||||
account = request.POST.get('account')
|
||||
city = request.POST.get('city')
|
||||
phone = request.POST.get('phone')
|
||||
email = request.POST.get('email')
|
||||
if first_name:
|
||||
contact_obj_list = contact_obj_list.filter(first_name__icontains=first_name)
|
||||
if account:
|
||||
contact_obj_list = contact_obj_list.filter(account=account)
|
||||
if city:
|
||||
a = Address.objects.filter(city__icontains=city)
|
||||
contact_obj_list = contact_obj_list.filter(address__in=a)
|
||||
if phone:
|
||||
contact_obj_list = contact_obj_list.filter(phone__icontains=phone)
|
||||
if email:
|
||||
contact_obj_list = contact_obj_list.filter(email__icontains=email)
|
||||
return render(request, 'contacts/contacts.html', {
|
||||
'contact_obj_list': contact_obj_list,
|
||||
'accounts': accounts,
|
||||
'per_page': page
|
||||
})
|
||||
|
||||
|
||||
@login_required
|
||||
def add_contact(request):
|
||||
acount = Account.objects.all()
|
||||
countri = Country.objects.all()
|
||||
assigned_user = User.objects.filter(is_active=True)
|
||||
|
||||
accounts = Account.objects.filter()
|
||||
users = User.objects.filter(is_active=True).order_by('email')
|
||||
form = ContactForm(assigned_to=users, account=accounts)
|
||||
address_form = BillingAddressForm()
|
||||
teams = Team.objects.all()
|
||||
assignedto_list = request.POST.getlist('assigned_to')
|
||||
teams_list = request.POST.getlist('teams')
|
||||
if request.method == 'POST':
|
||||
|
||||
address_form = AddressForm(request.POST)
|
||||
form = ContactForm(request.POST)
|
||||
|
||||
form = ContactForm(request.POST, assigned_to=users, account=accounts)
|
||||
address_form = BillingAddressForm(request.POST)
|
||||
if form.is_valid() and address_form.is_valid():
|
||||
address_obj = address_form.save()
|
||||
contact_obj = form.save(commit=False)
|
||||
contact_obj.address = address_obj
|
||||
contact_obj.created_by = request.user
|
||||
contact_obj.save()
|
||||
contact_obj.users = request.user
|
||||
contact_obj.save()
|
||||
return HttpResponseRedirect(reverse('contacts:list'))
|
||||
contact_obj.assigned_to.add(*assignedto_list)
|
||||
contact_obj.teams.add(*teams_list)
|
||||
if request.is_ajax():
|
||||
return JsonResponse({'error': False})
|
||||
if request.POST.get("savenewform"):
|
||||
return HttpResponseRedirect(reverse("contacts:add_contact"))
|
||||
else:
|
||||
return HttpResponseRedirect(reverse('contacts:list'))
|
||||
else:
|
||||
if request.is_ajax():
|
||||
return JsonResponse({'error': True, 'contact_errors': form.errors})
|
||||
return render(request, 'contacts/create_contact.html', {
|
||||
'err_contct_form': form.errors, 'acount': acount,
|
||||
'err_address_form': address_form.errors, 'teams': TEAMS,
|
||||
'countri': countri, 'assigned_user': assigned_user})
|
||||
|
||||
'contact_form': form,
|
||||
'address_form': address_form,
|
||||
'accounts': accounts,
|
||||
'countries': COUNTRIES,
|
||||
'teams': teams,
|
||||
'users': users,
|
||||
'assignedto_list': assignedto_list,
|
||||
'teams_list': teams_list
|
||||
})
|
||||
else:
|
||||
return render(request, 'contacts/create_contact.html', {
|
||||
'acount': acount, 'countri': countri,
|
||||
'teams': TEAMS, 'assigned_user': assigned_user})
|
||||
'contact_form': form,
|
||||
'address_form': address_form,
|
||||
'accounts': accounts,
|
||||
'countries': COUNTRIES,
|
||||
'teams': teams,
|
||||
'users': users,
|
||||
'assignedto_list': assignedto_list,
|
||||
'teams_list': teams_list
|
||||
})
|
||||
|
||||
|
||||
@login_required
|
||||
def display_contact(request):
|
||||
display_obj = Contact.objects.all()
|
||||
count = Contact.objects.all().count()
|
||||
acount = Account.objects.all()
|
||||
page = request.GET.get('per_page')
|
||||
name = request.GET.get('name')
|
||||
account = request.GET.get('account')
|
||||
city = request.GET.get('city')
|
||||
phone = request.GET.get('phone')
|
||||
email = request.GET.get('email')
|
||||
|
||||
if name:
|
||||
display_obj = display_obj.filter(name__icontains=name)
|
||||
|
||||
if account:
|
||||
display_obj = display_obj.filter(account=account)
|
||||
|
||||
if city:
|
||||
a = Address.objects.filter(city__icontains=city)
|
||||
display_obj = display_obj.filter(address__in=a)
|
||||
|
||||
if phone:
|
||||
display_obj = display_obj.filter(phone__contains=phone)
|
||||
|
||||
if email:
|
||||
display_obj = display_obj.filter(email__contains=email)
|
||||
|
||||
return render(request, 'contacts/contacts.html', {
|
||||
'contacts': display_obj, 'count': count,
|
||||
'acount': acount, 'per_page': page})
|
||||
|
||||
|
||||
@login_required
|
||||
def delete_contact(request, pk):
|
||||
Contact.objects.filter(id=pk).delete()
|
||||
if request.is_ajax():
|
||||
return JsonResponse({'error': False})
|
||||
return HttpResponseRedirect(reverse('contacts:list'))
|
||||
def view_contact(request, contact_id):
|
||||
contact_record = get_object_or_404(
|
||||
Contact.objects.select_related("address"), id=contact_id)
|
||||
comments = contact_record.contact_comments.all()
|
||||
return render(request, 'contacts/view_contact.html', {
|
||||
'contact_record': contact_record,
|
||||
'comments': comments})
|
||||
|
||||
|
||||
@login_required
|
||||
def edit_contact(request, pk):
|
||||
edit_obj = get_object_or_404(Contact, id=pk)
|
||||
address_obj = get_object_or_404(Address, id=edit_obj.address.id)
|
||||
acount = Account.objects.all()
|
||||
countri = Country.objects.all()
|
||||
assigned_user = User.objects.filter(is_active=True)
|
||||
address_form = AddressForm(instance=address_obj)
|
||||
form = ContactForm(instance=edit_obj)
|
||||
contact_obj = get_object_or_404(Contact, id=pk)
|
||||
address_obj = get_object_or_404(Address, id=contact_obj.address.id)
|
||||
accounts = Account.objects.filter()
|
||||
users = User.objects.filter(is_active=True).order_by('email')
|
||||
form = ContactForm(instance=contact_obj, assigned_to=users, account=accounts)
|
||||
address_form = BillingAddressForm(instance=address_obj)
|
||||
teams = Team.objects.all()
|
||||
assignedto_list = request.POST.getlist('assigned_to')
|
||||
teams_list = request.POST.getlist('teams')
|
||||
if request.method == 'POST':
|
||||
address_form = AddressForm(request.POST, instance=address_obj)
|
||||
form = ContactForm(request.POST, instance=edit_obj)
|
||||
form = ContactForm(request.POST, instance=contact_obj, assigned_to=users, account=accounts)
|
||||
address_form = BillingAddressForm(request.POST, instance=address_obj)
|
||||
if form.is_valid() and address_form.is_valid():
|
||||
addres_obj = address_form.save()
|
||||
contact_obj = form.save(commit=False)
|
||||
contact_obj.address = addres_obj
|
||||
contact_obj.created_by = request.user
|
||||
contact_obj.save()
|
||||
contact_obj.assigned_to.clear()
|
||||
contact_obj.assigned_to.add(*assignedto_list)
|
||||
contact_obj.teams.clear()
|
||||
contact_obj.teams.add(*teams_list)
|
||||
if request.is_ajax():
|
||||
return JsonResponse({'error': False})
|
||||
return HttpResponseRedirect(reverse('contacts:list'))
|
||||
else:
|
||||
if request.is_ajax():
|
||||
return JsonResponse({'error': True, 'contact_errors': form.errors})
|
||||
return render(request, 'contacts/create_contact.html', {
|
||||
'edit_obj': edit_obj, 'err_contct_form': form.errors,
|
||||
'teams': TEAMS, 'err_address_form': address_form.errors,
|
||||
'acount': acount, 'countri': countri,
|
||||
'assigned_user': assigned_user})
|
||||
'contact_form': form,
|
||||
'address_form': address_form,
|
||||
'contact_obj': contact_obj,
|
||||
'accounts': accounts,
|
||||
'countries': COUNTRIES,
|
||||
'teams': teams,
|
||||
'users': users,
|
||||
'assignedto_list': assignedto_list,
|
||||
'teams_list': teams_list
|
||||
})
|
||||
else:
|
||||
return render(request, 'contacts/create_contact.html', {
|
||||
'edit_obj': edit_obj, 'address_obj': address_obj,
|
||||
'acount': acount, 'countri': countri, 'teams': TEAMS,
|
||||
'assigned_user': assigned_user})
|
||||
'contact_form': form,
|
||||
'address_form': address_form,
|
||||
'contact_obj': contact_obj,
|
||||
'address_obj': address_obj,
|
||||
'accounts': accounts,
|
||||
'countries': COUNTRIES,
|
||||
'teams': teams,
|
||||
'users': users,
|
||||
'assignedto_list': assignedto_list,
|
||||
'teams_list': teams_list
|
||||
})
|
||||
|
||||
|
||||
@login_required
|
||||
def view_contact(request, pk):
|
||||
con = Contact.objects.get(id=pk)
|
||||
accunt = Account.objects.all()
|
||||
contact = Contact.objects.all()
|
||||
opportunity = Opportunity.objects.filter(contacts=con).order_by('id')
|
||||
cases = Case.objects.filter(contacts=con).order_by('id')
|
||||
users = User.objects.filter(is_active=True)
|
||||
comments = Comments.objects.filter(contactid=con)
|
||||
meetings = Event.objects.all()
|
||||
return render(request, 'contacts/view_contact.html', {
|
||||
'meetings': meetings, 'opportunity': opportunity, 'comments': comments,
|
||||
'con': con, 'stages': STAGES, 'sources': SOURCES,
|
||||
'accunt': accunt, 'contact': contact, 'users': users, 'cases': cases})
|
||||
|
||||
|
||||
@login_required
|
||||
def get_contacts(request):
|
||||
if request.method == 'GET':
|
||||
if request.user.is_authenticated():
|
||||
contacts = Contact.objects.all()
|
||||
return render(request, 'contacts/contacts_list.html', {
|
||||
'contacts': contacts})
|
||||
else:
|
||||
return HttpResponseRedirect('accounts/login')
|
||||
def remove_contact(request, pk):
|
||||
contact_record = get_object_or_404(Contact, id=pk)
|
||||
contact_record.delete()
|
||||
if request.is_ajax():
|
||||
return JsonResponse({'error': False})
|
||||
else:
|
||||
return HttpResponse
|
||||
('Invalid Method or Not Authanticated in load_calls')
|
||||
return HttpResponseRedirect(reverse('contacts:list'))
|
||||
|
||||
# CRUD Operations End
|
||||
# Comments Section Starts
|
||||
|
||||
|
||||
@login_required
|
||||
def comment_add(request):
|
||||
def add_comment(request):
|
||||
if request.method == 'POST':
|
||||
contact = get_object_or_404(Contact, id=request.POST.get('contactid'))
|
||||
assigned = False
|
||||
if contact.created_user:
|
||||
assigned = (int(contact.created_user) == request.user)
|
||||
if request.user == contact.users or assigned:
|
||||
form = CommentForm(request.POST)
|
||||
if request.user in contact.assigned_to.all() or request.user == contact.created_by:
|
||||
form = ContactCommentForm(request.POST)
|
||||
if form.is_valid():
|
||||
comment = request.POST.get('comment')
|
||||
comment_user = request.user
|
||||
contactid = request.POST.get('contactid')
|
||||
c = Comments.objects.create(
|
||||
comment=comment,
|
||||
contactid=Contact.objects.get(id=contactid),
|
||||
comment_user=comment_user)
|
||||
data = {"com_id": c.id, "comment": c.comment,
|
||||
"comment_time": c.comment_time,
|
||||
"com_user": c.comment_user.username}
|
||||
contact_comment = form.save(commit=False)
|
||||
contact_comment.comment = request.POST.get('comment')
|
||||
contact_comment.commented_by = request.user
|
||||
contact_comment.contact = contact
|
||||
contact_comment.save()
|
||||
data = {"comment_id": contact_comment.id, "comment": contact_comment.comment,
|
||||
"commented_on": contact_comment.commented_on,
|
||||
"commented_by": contact_comment.commented_by.email}
|
||||
return JsonResponse(data)
|
||||
else:
|
||||
return JsonResponse({"error": form['comment'].errors})
|
||||
|
|
@ -176,13 +197,13 @@ def comment_add(request):
|
|||
|
||||
|
||||
@login_required
|
||||
def comment_edit(request):
|
||||
def edit_comment(request):
|
||||
if request.method == "POST":
|
||||
comment = request.POST.get('comment')
|
||||
comment_id = request.POST.get("commentid")
|
||||
com = get_object_or_404(Comments, id=comment_id)
|
||||
form = CommentForm(request.POST)
|
||||
if request.user == com.comment_user:
|
||||
com = get_object_or_404(Comment, id=comment_id)
|
||||
form = ContactCommentForm(request.POST)
|
||||
if request.user == com.commented_by:
|
||||
if form.is_valid():
|
||||
com.comment = comment
|
||||
com.save()
|
||||
|
|
@ -191,21 +212,33 @@ def comment_edit(request):
|
|||
else:
|
||||
return JsonResponse({"error": form['comment'].errors})
|
||||
else:
|
||||
return JsonResponse({"error": "You dont have Access to edit"})
|
||||
return JsonResponse({"error": "You dont have authentication to edit"})
|
||||
else:
|
||||
return render(request, "404.html")
|
||||
|
||||
|
||||
@login_required
|
||||
def comment_remove(request):
|
||||
def remove_comment(request):
|
||||
if request.method == 'POST':
|
||||
comment_id = request.POST.get('comment_id')
|
||||
c = get_object_or_404(Comments, id=comment_id)
|
||||
if request.user == c.comment_user:
|
||||
get_object_or_404(Comments, id=comment_id).delete()
|
||||
comment = get_object_or_404(Comment, id=comment_id)
|
||||
if request.user == comment.commented_by:
|
||||
comment.delete()
|
||||
data = {"cid": comment_id}
|
||||
return JsonResponse(data)
|
||||
else:
|
||||
return JsonResponse({"error": "You Dont have permisions to delete"})
|
||||
else:
|
||||
return HttpResponse("Something Went Wrong!!")
|
||||
return HttpResponse("Something Went Wrong")
|
||||
|
||||
# Comments Section Ends
|
||||
# Other Views
|
||||
|
||||
|
||||
@login_required
|
||||
def get_contacts(request):
|
||||
if request.method == 'GET':
|
||||
contacts = Contact.objects.filter()
|
||||
return render(request, 'contacts/contacts_list.html', {'contacts': contacts})
|
||||
else:
|
||||
return HttpResponse('Invalid Method or Not Authanticated in load_calls')
|
||||
|
|
|
|||
|
|
@ -1,35 +1,50 @@
|
|||
from django import forms
|
||||
from leads.models import Lead
|
||||
from common.models import Comment
|
||||
from common.models import Address
|
||||
from common.models import Address, Comment
|
||||
|
||||
|
||||
class CreateLeadform(forms.ModelForm):
|
||||
class LeadForm(forms.ModelForm):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
assigned_users = kwargs.pop('assigned_to', [])
|
||||
super(LeadForm, self).__init__(*args, **kwargs)
|
||||
for field in self.fields.values():
|
||||
field.widget.attrs = {"class": "form-control"}
|
||||
if self.data.get('status') == 'converted':
|
||||
self.fields['account_name'].required = True
|
||||
self.fields['assigned_to'].queryset = assigned_users
|
||||
self.fields['assigned_to'].required = False
|
||||
self.fields['teams'].required = False
|
||||
self.fields['phone'].required = False
|
||||
self.fields['first_name'].widget.attrs.update({
|
||||
'placeholder': 'First Name'})
|
||||
self.fields['last_name'].widget.attrs.update({
|
||||
'placeholder': 'Last Name'})
|
||||
self.fields['account_name'].widget.attrs.update({
|
||||
'placeholder': 'Account Name'})
|
||||
|
||||
class Meta:
|
||||
model = Lead
|
||||
fields = ['title', 'first_name', 'last_name', 'email', 'description',
|
||||
'account', 'website', 'status', 'phone', 'teams', 'assigned_to',
|
||||
'source', 'opportunity_amount', 'description']
|
||||
fields = ('assigned_to', 'teams', 'first_name', 'last_name', 'account_name', 'title',
|
||||
'phone', 'email', 'status', 'source', 'website', 'address', 'description'
|
||||
)
|
||||
|
||||
def clean_phone(self):
|
||||
a = len(self.data.get("phone"))
|
||||
if (a >= 10 and a <= 12):
|
||||
return self.data.get("phone")
|
||||
else:
|
||||
raise forms.ValidationError("Phone number must be Minimum of 10 Digits and Maximum of 12 Digits")
|
||||
client_phone = self.cleaned_data.get('phone', None)
|
||||
if client_phone:
|
||||
try:
|
||||
if int(client_phone) and not client_phone.isalpha():
|
||||
ph_length = str(client_phone)
|
||||
if len(ph_length) < 10 or len(ph_length) > 13:
|
||||
raise forms.ValidationError('Phone number must be minimum 10 Digits and maximum 13 Digits')
|
||||
except (ValueError):
|
||||
raise forms.ValidationError('Phone Number should contain only Numbers')
|
||||
return client_phone
|
||||
|
||||
|
||||
class AddressLeadForm(forms.ModelForm):
|
||||
|
||||
class Meta:
|
||||
model = Address
|
||||
fields = ['street', 'city', 'state', 'postcode', 'country']
|
||||
|
||||
|
||||
class CommentForm(forms.ModelForm):
|
||||
class LeadCommentForm(forms.ModelForm):
|
||||
comment = forms.CharField(max_length=64, required=True)
|
||||
|
||||
class Meta:
|
||||
model = Comment
|
||||
fields = ['comment', 'commented_by', 'lead']
|
||||
fields = ('comment', 'lead', 'commented_by')
|
||||
|
|
|
|||
|
|
@ -1,21 +1,26 @@
|
|||
from django.test import TestCase
|
||||
from django.test import Client
|
||||
from django.contrib.auth.models import User
|
||||
from leads.models import Lead
|
||||
from common.models import Address, User
|
||||
from common.models import Address, Country
|
||||
from accounts.models import Account
|
||||
|
||||
|
||||
class TestLeadModel(object):
|
||||
def setUp(self):
|
||||
self.client = Client()
|
||||
self.country = Country.objects.create(iso_3166_1_a2="IN",
|
||||
iso_3166_1_a3="IND",
|
||||
iso_3166_1_numeric="001",
|
||||
name="India",
|
||||
printable_name="Bharath",
|
||||
is_shipping_country="True")
|
||||
|
||||
self.address = Address.objects.create(street="Gokul enclave colony",
|
||||
city="Hasthinapuram",
|
||||
state="Telangana",
|
||||
postcode="500079",
|
||||
country='IN')
|
||||
self.user = User.objects.create_superuser('user@micropyramid.com',
|
||||
'username', 'password')
|
||||
country=self.country)
|
||||
|
||||
self.account = Account.objects.create(name="account",
|
||||
email="account@gmail.com",
|
||||
|
|
@ -23,11 +28,13 @@ class TestLeadModel(object):
|
|||
billing_address=Address.objects.get(pk=1),
|
||||
shipping_address=Address.objects.get(pk=1),
|
||||
website="account.com",
|
||||
account_type="account",
|
||||
sis_code="12345",
|
||||
industry="IT",
|
||||
description="account", created_by=self.user)
|
||||
description="account")
|
||||
|
||||
self.lead = Lead.objects.create(title="LeadCreation",
|
||||
first_name="kotha",
|
||||
name="kotha",
|
||||
email="anjalikotha1993@gmail.com",
|
||||
account=self.account,
|
||||
address=self.address,
|
||||
|
|
@ -35,8 +42,10 @@ class TestLeadModel(object):
|
|||
status="assigned",
|
||||
source="Call",
|
||||
opportunity_amount="700",
|
||||
description="Iam an Lead", created_by=self.user)
|
||||
description="Iam an Lead")
|
||||
|
||||
self.user = User.objects.create_superuser('user@micropyramid.com',
|
||||
'username', 'password')
|
||||
self.client.login(username='user@micropyramid.com', password='password')
|
||||
|
||||
def testaddress_post_object_creation(self):
|
||||
|
|
@ -47,13 +56,13 @@ class TestLeadModel(object):
|
|||
p = Address.objects.get(state="Telangana")
|
||||
self.assertEqual(p.street, "Gokul enclave colony")
|
||||
|
||||
# def testcountry_post_object_creation(self):
|
||||
# c = Country.objects.count()
|
||||
# self.assertEqual(c, 1)
|
||||
def testcountry_post_object_creation(self):
|
||||
c = Country.objects.count()
|
||||
self.assertEqual(c, 1)
|
||||
|
||||
# def test_get_countryobject_with_name(self):
|
||||
# p = Country.objects.get(name="India")
|
||||
# self.assertEqual(p.name, "India")
|
||||
def test_get_countryobject_with_name(self):
|
||||
p = Country.objects.get(name="India")
|
||||
self.assertEqual(p.name, "India")
|
||||
|
||||
def test_lead_object_creation(self):
|
||||
c = Lead.objects.count()
|
||||
|
|
|
|||
|
|
@ -5,15 +5,15 @@ app_name = 'leads'
|
|||
|
||||
|
||||
urlpatterns = [
|
||||
|
||||
|
||||
url(r'^list/$', views.display, name='list'),
|
||||
url(r'^list/$', views.leads_list, name='list'),
|
||||
url(r'^create/$', views.add_lead, name='add_lead'),
|
||||
url(r'^(?P<pk>\d+)/edit/$', views.edit_lead, name='edit_lead'),
|
||||
url(r'^(?P<pk>\d+)/delete/$', views.delete_lead, name="delete_lead"),
|
||||
url(r'^(?P<pk>\d+)/view/$', views.view_lead, name="view_lead"),
|
||||
url(r'^create_comment/$', views.comment_add, name='create_comment'),
|
||||
url(r'^remove_comment/$', views.comment_remove, name='remove_comment'),
|
||||
url(r'^get/list/$', views.get_leads, name='get_lead'),
|
||||
url(r'^(?P<lead_id>\d+)/view/$', views.view_lead, name="view_lead"),
|
||||
url(r'^(?P<lead_id>\d+)/edit/$', views.edit_lead, name='edit_lead'),
|
||||
url(r'^(?P<lead_id>\d+)/delete/$', views.remove_lead, name="remove_lead"),
|
||||
url(r'^(?P<pk>\d+)/convert/$', views.leads_convert, name='leads_convert'),
|
||||
# comments
|
||||
url(r'^comment/add/$', views.add_comment, name='add_comment'),
|
||||
url(r'^comment/edit/$', views.edit_comment, name='edit_comment'),
|
||||
url(r'^comment/remove/$', views.remove_comment, name='remove_comment'),
|
||||
url(r'^get/list/$', views.get_leads, name='get_lead'),
|
||||
]
|
||||
|
|
|
|||
491
leads/views.py
491
leads/views.py
|
|
@ -1,306 +1,329 @@
|
|||
from django.contrib.auth.models import User
|
||||
from django.shortcuts import render, get_object_or_404
|
||||
from django.http import HttpResponseRedirect, HttpResponse, JsonResponse
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.urls import reverse
|
||||
from django.db.models import Q
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.forms.models import modelformset_factory
|
||||
|
||||
from leads.models import Lead
|
||||
from contacts.forms import ContactForm
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from common.models import Address, Comment, Team
|
||||
from common.utils import LEAD_STATUS, LEAD_SOURCE, INDCHOICES, TYPECHOICES
|
||||
from leads.forms import CommentForm, CreateLeadform, AddressLeadForm
|
||||
from django.urls import reverse
|
||||
from common.models import User, Address, Comment, Team
|
||||
from common.utils import LEAD_STATUS, LEAD_SOURCE, INDCHOICES, TYPECHOICES, COUNTRIES
|
||||
from leads.forms import LeadCommentForm, LeadForm
|
||||
from accounts.forms import AccountForm
|
||||
# from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
||||
from common.forms import BillingAddressForm, ShippingAddressForm
|
||||
from common.forms import BillingAddressForm
|
||||
from accounts.models import Account
|
||||
from planner.models import Event, Reminder
|
||||
from planner.forms import ReminderForm
|
||||
|
||||
# CRUD Operations Start
|
||||
|
||||
|
||||
@login_required
|
||||
def leads_list(request):
|
||||
lead_obj = Lead.objects.all()
|
||||
page = request.POST.get('per_page')
|
||||
first_name = request.POST.get('first_name')
|
||||
last_name = request.POST.get('last_name')
|
||||
city = request.POST.get('city')
|
||||
email = request.POST.get('email')
|
||||
if first_name:
|
||||
lead_obj = Lead.objects.filter(first_name__icontains=first_name)
|
||||
if last_name:
|
||||
lead_obj = Lead.objects.filter(last_name__icontains=last_name)
|
||||
if city:
|
||||
lead_obj = Lead.objects.filter(address=Address.objects.filter
|
||||
(city__icontains=city))
|
||||
if email:
|
||||
lead_obj = Lead.objects.filter(email__icontains=email)
|
||||
|
||||
return render(request, 'leads/leads.html', {
|
||||
'lead_obj': lead_obj, 'per_page': page})
|
||||
|
||||
|
||||
@login_required
|
||||
def add_lead(request):
|
||||
acount = Account.objects.all()
|
||||
countries = Country.objects.all()
|
||||
assigned_user = User.objects.filter(is_active=True)
|
||||
accounts = Account.objects.all()
|
||||
users = User.objects.filter(is_active=True).order_by('email')
|
||||
teams = Team.objects.all()
|
||||
assignedto_list = request.POST.getlist('assigned_to')
|
||||
teams_list = request.POST.getlist('teams')
|
||||
lead_account = request.POST.get('account_name')
|
||||
lead_email = request.POST.get('email')
|
||||
lead_phone = request.POST.get('phone')
|
||||
form = LeadForm(assigned_to=users)
|
||||
address_form = BillingAddressForm()
|
||||
if request.method == 'POST':
|
||||
address_form = AddressLeadForm(request.POST)
|
||||
form = CreateLeadform(request.POST)
|
||||
form = LeadForm(request.POST, assigned_to=users)
|
||||
address_form = BillingAddressForm(request.POST)
|
||||
if form.is_valid() and address_form.is_valid():
|
||||
address_obj = address_form.save()
|
||||
lead_obj = form.save(commit=False)
|
||||
lead_obj.address = address_obj
|
||||
address_object = address_form.save()
|
||||
lead_obj.address = address_object
|
||||
lead_obj.created_by = request.user
|
||||
lead_obj.save()
|
||||
return HttpResponseRedirect(reverse('leads:list'))
|
||||
lead_obj.assigned_to.add(*assignedto_list)
|
||||
lead_obj.teams.add(*teams_list)
|
||||
if request.POST.get('status') == "converted":
|
||||
Account.objects.create(
|
||||
created_by=request.user, name=lead_account,
|
||||
email=lead_email, phone=lead_phone
|
||||
)
|
||||
if request.POST.get("savenewform"):
|
||||
return HttpResponseRedirect(reverse("leads:add_lead"))
|
||||
else:
|
||||
return HttpResponseRedirect(reverse('leads:list'))
|
||||
else:
|
||||
return render(request, 'leads/create_lead.html', {
|
||||
'error_lead_form': form.errors,
|
||||
'error_address_form': address_form.errors,
|
||||
'acount': acount, 'countries': countries,
|
||||
'teams': TEAMS,
|
||||
'assigned_user': assigned_user,
|
||||
'status': lead_status,
|
||||
'source': lead_source})
|
||||
|
||||
'lead_form': form, 'address_form': address_form,
|
||||
'accounts': accounts, 'countries': COUNTRIES,
|
||||
'teams': teams, 'users': users,
|
||||
'status': LEAD_STATUS, 'source': LEAD_SOURCE,
|
||||
'assignedto_list': assignedto_list, 'teams_list': teams_list})
|
||||
else:
|
||||
return render(request, 'leads/create_lead.html', {
|
||||
'acount': acount, 'countries': countries, 'teams': TEAMS,
|
||||
'assigned_user': assigned_user,
|
||||
'status': lead_status, 'source': lead_source})
|
||||
|
||||
|
||||
@login_required
|
||||
def edit_lead(request, pk):
|
||||
post = get_object_or_404(Lead, id=pk)
|
||||
comments = Comments.objects.filter(leadid=pk).order_by('-id')
|
||||
dis_address_obj = get_object_or_404(Address, id=post.address.id)
|
||||
acount = Account.objects.all()
|
||||
countries = Country.objects.all()
|
||||
assigned_user = User.objects.filter(is_active=True)
|
||||
address_form = AddressLeadForm(instance=dis_address_obj)
|
||||
form = CreateLeadform(instance=post)
|
||||
|
||||
if request.method == 'POST':
|
||||
|
||||
address_form = AddressLeadForm(request.POST, instance=dis_address_obj)
|
||||
form = CreateLeadform(request.POST, instance=post)
|
||||
|
||||
if form.is_valid() and address_form.is_valid():
|
||||
|
||||
dis_address_obj = address_form.save()
|
||||
lead_obj = form.save(commit=False)
|
||||
lead_obj.address = dis_address_obj
|
||||
lead_obj.save()
|
||||
|
||||
return HttpResponseRedirect(reverse('leads:list'))
|
||||
|
||||
else:
|
||||
return render(request, 'leads/create_lead.html', {
|
||||
'post': post,
|
||||
'error_lead_form': form.errors,
|
||||
'error_address_form': address_form.errors,
|
||||
'acount': acount, 'countries': countries,
|
||||
'teams': TEAMS,
|
||||
'assigned_user': assigned_user, 'comments': comments,
|
||||
'status': lead_status, 'source': lead_source})
|
||||
else:
|
||||
return render(request, 'leads/create_lead.html', {
|
||||
'post': post, 'dis_address_obj': dis_address_obj,
|
||||
'acount': acount, 'countries': countries, 'teams': TEAMS,
|
||||
'assigned_user': assigned_user, 'comments': comments,
|
||||
'status': lead_status, 'source': lead_source})
|
||||
|
||||
|
||||
@login_required
|
||||
def delete_lead(request, pk):
|
||||
post = Lead.objects.filter(id=pk)
|
||||
post.delete()
|
||||
return HttpResponseRedirect(reverse('leads:list'))
|
||||
|
||||
|
||||
@login_required
|
||||
def display(request):
|
||||
crm_task = Lead.objects.all()
|
||||
count = Lead.objects.count()
|
||||
dis_address_obj = Address.objects.all()
|
||||
account = Account.objects.all()
|
||||
if request.method == 'POST':
|
||||
name = request.POST.get('name')
|
||||
account = request.POST.get('account')
|
||||
status = request.POST.get('status')
|
||||
email = request.POST.get('email')
|
||||
crm_task = Lead.objects.all()
|
||||
if name:
|
||||
crm_task = Lead.objects.filter(name=name)
|
||||
if account:
|
||||
crm_task = Lead.objects.filter(account=account)
|
||||
if status:
|
||||
crm_task = Lead.objects.filter(status=status)
|
||||
if email:
|
||||
crm_task = Lead.objects.filter(email__contains=email)
|
||||
return render(request, 'leads/leads.html', {
|
||||
'crm_task': crm_task, 'dis_address_obj': dis_address_obj,
|
||||
'count': count, 'status': lead_status})
|
||||
else:
|
||||
return render(request, 'leads/leads.html', {
|
||||
'dis_address_obj': dis_address_obj, 'count': count,
|
||||
'crm_task': crm_task, 'account': account, 'status': lead_status})
|
||||
'lead_form': form, 'address_form': address_form,
|
||||
'accounts': accounts, 'countries': COUNTRIES, 'teams': teams,
|
||||
'users': users, 'status': LEAD_STATUS, 'source': LEAD_SOURCE,
|
||||
'assignedto_list': assignedto_list, 'teams_list': teams_list})
|
||||
|
||||
|
||||
@login_required
|
||||
@csrf_exempt
|
||||
def view_lead(request, pk):
|
||||
ss = Lead.objects.get(id=pk)
|
||||
crm_task = Lead.objects.all()
|
||||
countries = Country.objects.all()
|
||||
comments = Comments.objects.filter(leadid=pk).order_by('-id')
|
||||
def view_lead(request, lead_id):
|
||||
lead_record = get_object_or_404(Lead, id=lead_id)
|
||||
comments = Comment.objects.filter(lead__id=lead_id).order_by('-id')
|
||||
meetings = Event.objects.filter(Q(created_by=request.user) | Q(updated_by=request.user),
|
||||
event_type='Meeting', attendees_leads=lead_record).order_by('-id')
|
||||
calls = Event.objects.filter(Q(created_by=request.user) | Q(updated_by=request.user),
|
||||
event_type='Call', attendees_leads=lead_record).order_by('-id')
|
||||
RemindersFormSet = modelformset_factory(Reminder, form=ReminderForm, can_delete=True)
|
||||
data = {
|
||||
'form-TOTAL_FORMS': '1',
|
||||
'form-INITIAL_FORMS': '0',
|
||||
'form-MAX_NUM_FORMS': '10',
|
||||
}
|
||||
reminder_form_set = RemindersFormSet(data)
|
||||
return render(request, "leads/view_leads.html", {
|
||||
"ss": ss, 'status': lead_status, 'countries': countries,
|
||||
'crm_task': crm_task, 'comments': comments})
|
||||
"lead_record": lead_record, 'status': LEAD_STATUS, 'countries': COUNTRIES,
|
||||
'comments': comments, 'reminder_form_set': reminder_form_set,
|
||||
'meetings': meetings, 'calls': calls
|
||||
})
|
||||
|
||||
|
||||
@login_required
|
||||
def get_leads(request):
|
||||
if request.method == 'GET':
|
||||
if request.user.is_authenticated():
|
||||
leads = Lead.objects.all()
|
||||
return render(request, 'leads/leads_list.html', {'leads': leads})
|
||||
else:
|
||||
return HttpResponseRedirect('accounts/login')
|
||||
else:
|
||||
return HttpResponse('Invalid Method or No Authanticated in load_calls')
|
||||
|
||||
|
||||
@login_required
|
||||
def comment_add(request):
|
||||
def edit_lead(request, lead_id):
|
||||
lead_obj = get_object_or_404(Lead, id=lead_id)
|
||||
address_obj = get_object_or_404(Address, id=lead_obj.address.id)
|
||||
accounts = Account.objects.all()
|
||||
users = User.objects.filter().order_by('email')
|
||||
form = LeadForm(instance=lead_obj, assigned_to=users)
|
||||
address_form = BillingAddressForm(instance=address_obj)
|
||||
assignedto_list = request.POST.getlist('assigned_to')
|
||||
teams_list = request.POST.getlist('teams')
|
||||
lead_account = request.POST.get('account_name')
|
||||
lead_email = request.POST.get('email')
|
||||
lead_phone = request.POST.get('phone')
|
||||
teams = Team.objects.all()
|
||||
if request.method == 'POST':
|
||||
form = CommentForm(request.POST)
|
||||
if form.is_valid():
|
||||
comment = request.POST.get('comment')
|
||||
f = form.save()
|
||||
f.comment_user = request.user
|
||||
f.save()
|
||||
return JsonResponse({"error": False})
|
||||
form = LeadForm(request.POST, instance=lead_obj, assigned_to=users)
|
||||
address_form = BillingAddressForm(request.POST, instance=address_obj)
|
||||
if request.POST.get('status') == "converted":
|
||||
form.fields['account_name'].required = True
|
||||
else:
|
||||
return JsonResponse({"error": form.errors})
|
||||
|
||||
if request.method == "GET":
|
||||
comment = request.GET.get('comment')
|
||||
comment_id = request.GET.get("commentid")
|
||||
com = Comments.objects.get(id=comment_id)
|
||||
form = CommentForm(request.GET)
|
||||
|
||||
if request.user == com.comment_user:
|
||||
if form.is_valid():
|
||||
com.comment = comment
|
||||
com.save()
|
||||
return JsonResponse({"comment": com.comment,
|
||||
"commentid": comment_id})
|
||||
else:
|
||||
return JsonResponse({"error": form.errors})
|
||||
form.fields['account_name'].required = False
|
||||
if form.is_valid() and address_form.is_valid():
|
||||
dis_address_obj = address_form.save()
|
||||
lead_obj = form.save(commit=False)
|
||||
lead_obj.address = dis_address_obj
|
||||
lead_obj.created_by = request.user
|
||||
lead_obj.save()
|
||||
lead_obj.assigned_to.clear()
|
||||
lead_obj.assigned_to.add(*assignedto_list)
|
||||
lead_obj.teams.clear()
|
||||
lead_obj.teams.add(*teams_list)
|
||||
if request.POST.get('status') == "converted":
|
||||
Account.objects.create(
|
||||
created_by=request.user, name=lead_account,
|
||||
email=lead_email, phone=lead_phone
|
||||
)
|
||||
return HttpResponseRedirect(reverse('leads:list'))
|
||||
else:
|
||||
return JsonResponse({"error":
|
||||
"You dont have authentication to edit"})
|
||||
return render(request, 'leads/create_lead.html', {
|
||||
'lead_obj': lead_obj,
|
||||
'lead_form': form,
|
||||
'address_form': address_form,
|
||||
'accounts': accounts, 'countries': COUNTRIES,
|
||||
'teams': teams, 'users': users,
|
||||
'status': LEAD_STATUS, 'source': LEAD_SOURCE,
|
||||
'assignedto_list': assignedto_list, 'teams_list': teams_list})
|
||||
else:
|
||||
return render(request, "404.html")
|
||||
return render(request, 'leads/create_lead.html', {
|
||||
'lead_form': form, 'address_form': address_form,
|
||||
'lead_obj': lead_obj, 'address_obj': address_obj,
|
||||
'accounts': accounts, 'countries': COUNTRIES, 'teams': teams,
|
||||
'users': users, 'status': LEAD_STATUS, 'source': LEAD_SOURCE,
|
||||
'assignedto_list': assignedto_list, 'teams_list': teams_list})
|
||||
|
||||
|
||||
@login_required
|
||||
def comment_remove(request):
|
||||
if request.method == 'POST':
|
||||
comment_id = request.POST.get('comment_id')
|
||||
Comments.objects.get(id=comment_id).delete()
|
||||
data = {"cid": comment_id}
|
||||
return JsonResponse(data)
|
||||
else:
|
||||
return HttpResponse("Something Went Wrong")
|
||||
def remove_lead(request, lead_id):
|
||||
lead_obj = get_object_or_404(Lead, id=lead_id)
|
||||
lead_obj.delete()
|
||||
return HttpResponseRedirect(reverse('leads:list'))
|
||||
|
||||
|
||||
# CRUD Operations Ends
|
||||
# Leads Conversion Functionality Starts
|
||||
|
||||
|
||||
# The Below View Should be Discussed for Functionality
|
||||
@login_required
|
||||
def leads_convert(request, pk):
|
||||
account_form = AccountForm()
|
||||
billing_form = BillingAddressForm()
|
||||
shipping_form = ShippingAddressForm(prefix='ship')
|
||||
country_list = Country.objects.all()
|
||||
users = User.objects.filter(is_active=True)
|
||||
crm_task = Lead.objects.all()
|
||||
post = Lead.objects.get(id=pk)
|
||||
assigned_user = User.objects.filter(is_active=True)
|
||||
countries = Country.objects.all()
|
||||
acount = Account.objects.all()
|
||||
form = ContactForm(request.POST)
|
||||
address_form = AddressLeadForm(request.POST)
|
||||
lead_objects = Lead.objects.all()
|
||||
lead_obj = Lead.objects.get(id=pk)
|
||||
accounts = Account.objects.all()
|
||||
contact_form = ContactForm()
|
||||
opportunity_form = OpportunityForm()
|
||||
teams = Team.objects.all()
|
||||
if request.method == "POST":
|
||||
if request.POST.get('accountname') == "on":
|
||||
account_form = AccountForm(request.POST)
|
||||
billing_form = BillingAddressForm(request.POST)
|
||||
shipping_form = ShippingAddressForm(request.POST, prefix='ship')
|
||||
if account_form.is_valid() and billing_form.is_valid() and shipping_form.is_valid():
|
||||
if request.POST.get("users"):
|
||||
users = User.objects.get(id=request.POST.get("users"))
|
||||
users.save()
|
||||
billing_object = billing_form.save()
|
||||
shipping_object = shipping_form.save()
|
||||
account_object = account_form.save(commit=False)
|
||||
account_object.billing_address = billing_object
|
||||
account_object.shipping_address = shipping_object
|
||||
account_object.created_by = request.user
|
||||
account_object.save()
|
||||
post.delete()
|
||||
lead_obj.delete()
|
||||
return HttpResponseRedirect(reverse('leads:list'))
|
||||
else:
|
||||
street1 = request.POST.get('ship-street')
|
||||
city1 = request.POST.get('ship-city')
|
||||
state1 = request.POST.get('ship-state')
|
||||
postcode1 = request.POST.get('ship-postcode')
|
||||
country1 = request.POST.get('ship-country')
|
||||
shipdata = {'street1': street1, 'city1': city1,
|
||||
'state1': state1,
|
||||
street1 = request.POST.get('street')
|
||||
city1 = request.POST.get('city')
|
||||
state1 = request.POST.get('state')
|
||||
postcode1 = request.POST.get('postcode')
|
||||
country1 = request.POST.get('country')
|
||||
shipdata = {'street1': street1, 'city1': city1, 'state1': state1,
|
||||
'postcode1': postcode1, 'country1': country1}
|
||||
return render(request, 'leads/checkbox.html', {
|
||||
'account_form': account_form,
|
||||
'form1': billing_form, 'form2': shipping_form,
|
||||
'form5': country_list,
|
||||
'acc_error': account_form.errors,
|
||||
'shipdata': shipdata,
|
||||
'industries': INDCHOICES, 'types': TYPECHOICES,
|
||||
'teams': TEAMS,
|
||||
'users': users,
|
||||
'crm_task': crm_task,
|
||||
"post": post,
|
||||
"acount": acount,
|
||||
"assigned_user": assigned_user,
|
||||
"counties": countries})
|
||||
'account_form': account_form, 'form1': billing_form, 'form2': shipping_form,
|
||||
'form5': COUNTRIES, 'stages': STAGES, 'acc_error': account_form.errors,
|
||||
'shipdata': shipdata, 'sources': LEAD_SOURCE, 'industries': INDCHOICES,
|
||||
'teams': teams, 'task': lead_objects, 'post': lead_obj,
|
||||
'accounts': accounts,
|
||||
'counties': COUNTRIES})
|
||||
|
||||
if request.POST.get('contactname') == "on":
|
||||
if form.is_valid() and address_form.is_valid():
|
||||
contact_form = ContactForm(request.POST)
|
||||
address_form = BillingAddressForm(request.POST)
|
||||
if contact_form.is_valid() and address_form.is_valid():
|
||||
address_obj = address_form.save()
|
||||
contact_obj = form.save(commit=False)
|
||||
contact_obj = contact_form.save(commit=False)
|
||||
contact_obj.address = address_obj
|
||||
contact_obj.created_by = request.user
|
||||
contact_obj.save()
|
||||
return HttpResponseRedirect(reverse('contacts:list'))
|
||||
else:
|
||||
return render(request, 'leads/checkbox.html', {
|
||||
'post': post,
|
||||
'acount': acount,
|
||||
'teams': TEAMS,
|
||||
'err_contct_form': form.errors,
|
||||
'assigned_user': assigned_user})
|
||||
'post': lead_obj, 'accounts': accounts, 'teams': teams,
|
||||
'contact_form': contact_form, 'address_form': address_form})
|
||||
if request.POST.get('opportunityname') == "on":
|
||||
opportunity_form = OpportunityForm(request.POST)
|
||||
if opportunity_form.is_valid():
|
||||
opportunity_form.save()
|
||||
return HttpResponseRedirect(reverse('oppurtunities:list'))
|
||||
else:
|
||||
return render(request, 'leads/checkbox.html', {
|
||||
'post': lead_obj, 'accounts': accounts, 'sources': LEAD_SOURCE,
|
||||
'teams': teams, 'stages': STAGES, 'opportunity_form': opportunity_form})
|
||||
else:
|
||||
return render(request, 'leads/checkbox.html', {
|
||||
'form': account_form,
|
||||
'form1': billing_form, 'form2': shipping_form,
|
||||
'form5': country_list, 'industries': INDCHOICES,
|
||||
'types': TYPECHOICES, 'teams': TEAMS,
|
||||
'users': users,
|
||||
'crm_task': crm_task,
|
||||
"post": post,
|
||||
"assigned_user": assigned_user,
|
||||
"counties": countries,
|
||||
'acount': acount})
|
||||
'form': account_form, 'form1': billing_form, 'form2': shipping_form,
|
||||
'form5': COUNTRIES, 'industries': INDCHOICES, 'teams': teams,
|
||||
'task': lead_objects, 'counties': COUNTRIES,
|
||||
'post': lead_obj, 'accounts': accounts})
|
||||
|
||||
|
||||
# @login_required
|
||||
# def new_contact(request, pk):
|
||||
# post = get_object(Lead, id=pk)
|
||||
# edit_obj = get_object(Contact, id=pk)
|
||||
# countri = Country.objects.all()
|
||||
# acount = Account.objects.all()
|
||||
# ss = Lead.objects.get(id=pk)
|
||||
# assigned_user = User.objects.filter(is_active=True)
|
||||
# Leads Conversion Functionality Ends
|
||||
# Comments Section Start
|
||||
|
||||
# if request.method == 'POST':
|
||||
|
||||
# address_form = AddressForm(request.POST)
|
||||
# form = ContactForm(request.POST)
|
||||
@login_required
|
||||
def add_comment(request):
|
||||
if request.method == 'POST':
|
||||
lead = get_object_or_404(Lead, id=request.POST.get('leadid'))
|
||||
if request.user in lead.assigned_to.all() or request.user == lead.created_by:
|
||||
form = LeadCommentForm(request.POST)
|
||||
if form.is_valid():
|
||||
lead_comment = form.save(commit=False)
|
||||
lead_comment.comment = request.POST.get('comment')
|
||||
lead_comment.commented_by = request.user
|
||||
lead_comment.lead = lead
|
||||
lead_comment.save()
|
||||
data = {
|
||||
"comment_id": lead_comment.id, "comment": lead_comment.comment,
|
||||
"commented_on": lead_comment.commented_on,
|
||||
"commented_by": lead_comment.commented_by.user.email
|
||||
}
|
||||
return JsonResponse(data)
|
||||
else:
|
||||
return JsonResponse({"error": form['comment'].errors})
|
||||
else:
|
||||
data = {'error': "You Dont Have permissions to Comment"}
|
||||
return JsonResponse(data)
|
||||
|
||||
# if form.is_valid() and address_form.is_valid():
|
||||
# address_obj = address_form.save()
|
||||
# contact_obj = form.save(commit=False)
|
||||
# contact_obj.address = address_obj
|
||||
# contact_obj.save()
|
||||
# return HttpResponseRedirect(reverse('contacts:list'))
|
||||
# else:
|
||||
# return render(request, 'leads/checkbox.html', {'ss': ss,
|
||||
# 'post': post,
|
||||
# 'acount': acount,
|
||||
# 'teams': TEAMS,
|
||||
# 'err_contct_form':form.errors,
|
||||
# 'edit_obj': edit_obj,
|
||||
# 'assigned_user': assigned_user})
|
||||
|
||||
@login_required
|
||||
def edit_comment(request):
|
||||
if request.method == "POST":
|
||||
comment = request.POST.get('comment')
|
||||
comment_id = request.POST.get("commentid")
|
||||
lead_comment = get_object_or_404(Comment, id=comment_id)
|
||||
form = LeadCommentForm(request.POST)
|
||||
if request.user == lead_comment.commented_by:
|
||||
if form.is_valid():
|
||||
lead_comment.comment = comment
|
||||
lead_comment.save()
|
||||
data = {"comment": lead_comment.comment, "commentid": comment_id}
|
||||
return JsonResponse(data)
|
||||
else:
|
||||
return JsonResponse({"error": form['comment'].errors})
|
||||
else:
|
||||
return JsonResponse({"error": "You dont have authentication to edit"})
|
||||
else:
|
||||
return render(request, "404.html")
|
||||
|
||||
|
||||
@login_required
|
||||
def remove_comment(request):
|
||||
if request.method == 'POST':
|
||||
comment_id = request.POST.get('comment_id')
|
||||
comment = get_object_or_404(Comment, id=comment_id)
|
||||
if request.user == comment.commented_by:
|
||||
comment.delete()
|
||||
data = {"cid": comment_id}
|
||||
return JsonResponse(data)
|
||||
else:
|
||||
return JsonResponse({"error": "You Dont have permisions to delete"})
|
||||
else:
|
||||
return HttpResponse("Something Went Wrong")
|
||||
|
||||
# Comments Section End
|
||||
# Other Views
|
||||
|
||||
|
||||
@login_required
|
||||
def get_leads(request):
|
||||
if request.method == 'GET':
|
||||
leads = Lead.objects.all()
|
||||
return render(request, 'leads/leads_list.html', {'leads': leads})
|
||||
else:
|
||||
return HttpResponse('Invalid Method or No Authanticated in load_calls')
|
||||
|
|
|
|||
|
|
@ -4,13 +4,35 @@ from common.models import Comment
|
|||
|
||||
|
||||
class OpportunityForm(forms.ModelForm):
|
||||
probability = forms.IntegerField(max_value=100, required=False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
assigned_users = kwargs.pop('assigned_to', [])
|
||||
opp_accounts = kwargs.pop('account', [])
|
||||
opp_contacts = kwargs.pop('contacts', [])
|
||||
super(OpportunityForm, self).__init__(*args, **kwargs)
|
||||
for field in self.fields.values():
|
||||
field.widget.attrs = {"class": "form-control"}
|
||||
self.fields['description'].widget.attrs.update({
|
||||
'rows': '8'})
|
||||
self.fields['assigned_to'].queryset = assigned_users
|
||||
self.fields['account'].queryset = opp_accounts
|
||||
self.fields['contacts'].queryset = opp_contacts
|
||||
self.fields['assigned_to'].required = False
|
||||
self.fields['teams'].required = False
|
||||
self.fields['contacts'].required = False
|
||||
|
||||
class Meta:
|
||||
model = Opportunity
|
||||
fields = "__all__"
|
||||
fields = (
|
||||
'name', 'amount', 'account', 'contacts', 'assigned_to', 'currency',
|
||||
'probability', 'teams', 'closed_on', 'lead_source', 'description', 'stage',
|
||||
)
|
||||
|
||||
|
||||
class CommentForm(forms.ModelForm):
|
||||
class OpportunityCommentForm(forms.ModelForm):
|
||||
comment = forms.CharField(max_length=64, required=True)
|
||||
|
||||
class Meta:
|
||||
model = Comment
|
||||
fields = ['comment', ]
|
||||
fields = ('comment', 'opportunity', 'commented_by')
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
from django.test import TestCase
|
||||
from oppurtunity.models import Opportunity
|
||||
from common.models import Address
|
||||
from common.models import Country, Address
|
||||
from accounts.models import Account
|
||||
from contacts.models import Contact
|
||||
from common.models import User
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
|
||||
# Create your tests here.
|
||||
|
|
@ -11,21 +11,23 @@ from common.models import User
|
|||
|
||||
class OpportunityModel(object):
|
||||
def setUp(self):
|
||||
self.country = Country.objects.create(
|
||||
iso_3166_1_a2="jh", iso_3166_1_a3="nh",
|
||||
iso_3166_1_numeric="gt", printable_name="America",
|
||||
name="India",
|
||||
is_shipping_country="True")
|
||||
self.address = Address.objects.create(
|
||||
street="kphb", city="hyderabad", postcode="584",
|
||||
country='IN')
|
||||
self.user = User.objects.create(username='madhurima')
|
||||
self.user.set_password('madhu123')
|
||||
self.user.save()
|
||||
|
||||
country=Country.objects.get(pk=1))
|
||||
self.account = Account.objects.create(
|
||||
name="uday", email="uday@gmail.com",
|
||||
phone="58964", billing_address=self.address,
|
||||
shipping_address=self.address,
|
||||
website="hello.com",
|
||||
industry="sw", description="bgyyr", created_by=self.user)
|
||||
account_type="initial",
|
||||
sis_code="98745", industry="sw", description="bgyyr")
|
||||
self.contacts = Contact.objects.create(
|
||||
first_name="navi",
|
||||
name="navi",
|
||||
email="navi@gmail.com", phone="8547",
|
||||
account=self.account,
|
||||
description="defyj",
|
||||
|
|
@ -35,6 +37,9 @@ class OpportunityModel(object):
|
|||
stage="negotiation/review", lead_source="Call", probability="58",
|
||||
close_date="2016-05-04",
|
||||
description="hgfdxc")
|
||||
self.user = User.objects.create(username='madhurima')
|
||||
self.user.set_password('madhu123')
|
||||
self.user.save()
|
||||
self.client.login(username='madhurima', password='madhu123')
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -5,16 +5,15 @@ app_name = 'oppurtunity'
|
|||
|
||||
|
||||
urlpatterns = [
|
||||
|
||||
url(r'^list/$', views.opp_list, name='list'),
|
||||
url(r'^create/$', views.opp_create, name='save'),
|
||||
url(r'^list/$', views.opp_display, name='list'),
|
||||
url(r'^(?P<pk>\d+)/view/$', views.opp_view, name='opp_view'),
|
||||
url(r'^(?P<pk>\d+)/edit/$', views.opp_edit, name='opp_edit'),
|
||||
url(r'^(?P<pk>\d+)/delete/$', views.opp_remove, name='opp_remove'),
|
||||
url(r'^contacts/$', views.contacts, name='contacts'),
|
||||
url(r'^editdetails/$', views.editdetails, name='editdetails'),
|
||||
url(r'^comment_add/$', views.comment_add, name='comment_add'),
|
||||
url(r'^comment_edit/$', views.comment_edit, name='comment_edit'),
|
||||
url(r'^comment_remove/$', views.comment_remove, name='comment_remove'),
|
||||
url(r'^(?P<opp_id>\d+)/delete/$', views.opp_delete, name='opp_delete'),
|
||||
url(r'^(?P<opp_id>\d+)/edit/$', views.opp_edit, name='opp_edit'),
|
||||
url(r'^(?P<opp_id>\d+)/view/$', views.opp_view, name='opp_view'),
|
||||
# url(r'^get/list/$', views.get_opportunity, name='get_opportunity'),
|
||||
url(r'^get/list/$', views.get_opportunity, name='get_opportunity'),
|
||||
# comments
|
||||
url(r'^comment/add/$', views.add_comment, name='add_comment'),
|
||||
url(r'^comment/edit/$', views.edit_comment, name='edit_comment'),
|
||||
url(r'^comment/remove/$', views.remove_comment, name='remove_comment'),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,185 +1,226 @@
|
|||
import json
|
||||
|
||||
from django.shortcuts import render, redirect
|
||||
from django.contrib.auth.models import User
|
||||
from django.http import HttpResponseRedirect, HttpResponse, JsonResponse
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from accounts.models import Account
|
||||
from oppurtunity.models import Opportunity
|
||||
from common.models import Comment, Team
|
||||
from common.utils import STAGES, SOURCES
|
||||
from oppurtunity.forms import OpportunityForm, CommentForm
|
||||
from contacts.models import Contact
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.urls import reverse
|
||||
import json
|
||||
# Create your views here.
|
||||
|
||||
from common.models import User, Comment, Team
|
||||
from common.utils import STAGES, SOURCES, CURRENCY_CODES
|
||||
from accounts.models import Account
|
||||
from contacts.models import Contact
|
||||
from oppurtunity.models import Opportunity
|
||||
from oppurtunity.forms import OpportunityForm, OpportunityCommentForm
|
||||
|
||||
# CRUD Operations Start
|
||||
|
||||
|
||||
@login_required
|
||||
def opp_list(request):
|
||||
opportunity_list = Opportunity.objects.all().prefetch_related("contacts", "account")
|
||||
accounts = Account.objects.all()
|
||||
contacts = Contact.objects.all()
|
||||
page = request.POST.get('per_page')
|
||||
opp_name = request.POST.get('name')
|
||||
opp_account = request.POST.get('account')
|
||||
opp_contact = request.POST.get('contacts')
|
||||
opp_stage = request.POST.get('stage')
|
||||
opp_source = request.POST.get('lead_source')
|
||||
if opp_name:
|
||||
opportunity_list = Opportunity.objects.filter(name__contains=opp_name)
|
||||
if opp_stage:
|
||||
opportunity_list = opportunity_list.filter(stage=opp_stage)
|
||||
if opp_source:
|
||||
opportunity_list = opportunity_list.filter(lead_source=opp_source)
|
||||
if opp_account:
|
||||
opportunity_list = opportunity_list.filter(account=opp_account)
|
||||
if opp_contact:
|
||||
opportunity_list = opportunity_list.filter(contacts=opp_contact)
|
||||
return render(request, "oppurtunity/opportunity.html", {
|
||||
'opportunity_list': opportunity_list,
|
||||
'accounts': accounts,
|
||||
'contacts': contacts,
|
||||
'stages': STAGES,
|
||||
'sources': SOURCES,
|
||||
'per_page': page
|
||||
})
|
||||
|
||||
|
||||
@login_required
|
||||
def opp_create(request):
|
||||
users = User.objects.filter(is_active=True)
|
||||
accunt = Account.objects.all()
|
||||
users = User.objects.filter(is_active=True).order_by('email')
|
||||
accounts = Account.objects.all()
|
||||
contacts = Contact.objects.all()
|
||||
form = OpportunityForm(assigned_to=users, account=accounts, contacts=contacts)
|
||||
assignedto_list = request.POST.getlist("assigned_to")
|
||||
teams_list = request.POST.getlist("teams")
|
||||
contacts_list = request.POST.getlist("contacts")
|
||||
teams = Team.objects.all()
|
||||
if request.method == 'POST':
|
||||
form = OpportunityForm(request.POST)
|
||||
form = OpportunityForm(request.POST, assigned_to=users, account=accounts, contacts=contacts)
|
||||
if form.is_valid():
|
||||
a = form.save()
|
||||
# a.contacts.add(*(request.POST.getlist("contacts")))
|
||||
accunt = Account.objects.all()
|
||||
a.users = request.user
|
||||
a.save()
|
||||
opportunity_obj = form.save(commit=False)
|
||||
opportunity_obj.created_by = request.user
|
||||
if request.POST.get('stage') in ['CLOSED WON', 'CLOSED LOST']:
|
||||
opportunity_obj.closed_by = request.user
|
||||
opportunity_obj.save()
|
||||
opportunity_obj.assigned_to.add(*assignedto_list)
|
||||
opportunity_obj.teams.add(*teams_list)
|
||||
opportunity_obj.contacts.add(*contacts_list)
|
||||
if request.is_ajax():
|
||||
return JsonResponse({'error': False})
|
||||
if request.POST.get("user"):
|
||||
a.users = User.objects.get(id=request.POST.get("users"))
|
||||
a.save()
|
||||
if request.POST.get("teams"):
|
||||
a.teams = request.POST.get("teams")
|
||||
a.save()
|
||||
if request.POST.get("savenewform"):
|
||||
return HttpResponseRedirect(reverse("oppurtunities:save"))
|
||||
else:
|
||||
return HttpResponseRedirect(reverse('oppurtunities:list'))
|
||||
else:
|
||||
if request.is_ajax():
|
||||
return HttpResponse(json.dumps({'error': False}))
|
||||
return JsonResponse({'error': True, 'opportunity_errors': form.errors})
|
||||
return render(request, 'oppurtunity/create_opportunity.html', {
|
||||
'opportunity_form': form,
|
||||
'accounts': accounts,
|
||||
'users': users,
|
||||
'teams': teams,
|
||||
'stages': STAGES,
|
||||
'sources': SOURCES,
|
||||
'currencies': CURRENCY_CODES,
|
||||
'assignedto_list': assignedto_list,
|
||||
'teams_list': teams_list,
|
||||
'contacts_list': contacts_list
|
||||
})
|
||||
else:
|
||||
return render(request, 'oppurtunity/create_opportunity.html', {
|
||||
'opportunity_form': form,
|
||||
'accounts': accounts,
|
||||
'users': users,
|
||||
'teams': teams,
|
||||
'stages': STAGES,
|
||||
'sources': SOURCES,
|
||||
'currencies': CURRENCY_CODES,
|
||||
'assignedto_list': assignedto_list,
|
||||
'teams_list': teams_list,
|
||||
'contacts_list': contacts_list
|
||||
})
|
||||
|
||||
|
||||
@login_required
|
||||
def opp_view(request, pk):
|
||||
opportunity_record = get_object_or_404(
|
||||
Opportunity.objects.prefetch_related("contacts", "account"), id=pk)
|
||||
comments = opportunity_record.opportunity_comments.all()
|
||||
return render(request, 'oppurtunity/view_opportunity.html', {
|
||||
'opportunity_record': opportunity_record,
|
||||
'comments': comments
|
||||
})
|
||||
|
||||
|
||||
@login_required
|
||||
def opp_edit(request, pk):
|
||||
opportunity_obj = get_object_or_404(Opportunity, id=pk)
|
||||
users = User.objects.filter(is_active=True).order_by('email')
|
||||
accounts = Account.objects.all()
|
||||
contacts = Contact.objects.all()
|
||||
form = OpportunityForm(
|
||||
instance=opportunity_obj, assigned_to=users, account=accounts, contacts=contacts)
|
||||
assignedto_list = request.POST.getlist("assigned_to")
|
||||
teams_list = request.POST.getlist("teams")
|
||||
contacts_list = request.POST.getlist("contacts")
|
||||
teams = Team.objects.all()
|
||||
if request.method == 'POST':
|
||||
form = OpportunityForm(
|
||||
request.POST, instance=opportunity_obj, assigned_to=users, account=accounts,
|
||||
contacts=contacts
|
||||
)
|
||||
if form.is_valid():
|
||||
opportunity_obj = form.save(commit=False)
|
||||
opportunity_obj.created_by = request.user
|
||||
if request.POST.get('stage') in ['CLOSED WON', 'CLOSED LOST']:
|
||||
opportunity_obj.closed_by = request.user
|
||||
opportunity_obj.save()
|
||||
opportunity_obj.assigned_to.clear()
|
||||
opportunity_obj.assigned_to.add(*assignedto_list)
|
||||
opportunity_obj.teams.clear()
|
||||
opportunity_obj.teams.add(*teams_list)
|
||||
opportunity_obj.contacts.clear()
|
||||
opportunity_obj.contacts.add(*request.POST.getlist("contacts"))
|
||||
if request.is_ajax():
|
||||
return JsonResponse({'error': False})
|
||||
return HttpResponseRedirect(reverse('oppurtunities:list'))
|
||||
else:
|
||||
if request.is_ajax():
|
||||
return JsonResponse({'error': True, 'opportunity_errors': form.errors})
|
||||
return render(request, 'oppurtunity/create_opportunity.html', {
|
||||
'stages': STAGES, 'sources': SOURCES,
|
||||
'accunt': accunt, 'teams': TEAMS, 'users': users,
|
||||
'error': form.errors})
|
||||
'opportunity_form': form,
|
||||
'opportunity_obj': opportunity_obj,
|
||||
'accounts': accounts,
|
||||
'users': users,
|
||||
'teams': teams,
|
||||
'stages': STAGES,
|
||||
'sources': SOURCES,
|
||||
'currencies': CURRENCY_CODES,
|
||||
'assignedto_list': assignedto_list,
|
||||
'teams_list': teams_list,
|
||||
'contacts_list': contacts_list
|
||||
})
|
||||
else:
|
||||
form = OpportunityForm()
|
||||
return render(request, 'oppurtunity/create_opportunity.html', {
|
||||
'form': form, 'stages': STAGES, 'sources': SOURCES,
|
||||
'accunt': accunt, 'teams': TEAMS, 'users': users})
|
||||
'opportunity_form': form,
|
||||
'opportunity_obj': opportunity_obj,
|
||||
'accounts': accounts,
|
||||
'users': users,
|
||||
'teams': teams,
|
||||
'stages': STAGES,
|
||||
'sources': SOURCES,
|
||||
'currencies': CURRENCY_CODES,
|
||||
'assignedto_list': assignedto_list,
|
||||
'teams_list': teams_list,
|
||||
'contacts_list': contacts_list
|
||||
})
|
||||
|
||||
|
||||
@login_required
|
||||
def opp_remove(request, pk):
|
||||
opportunity_record = get_object_or_404(Opportunity, id=pk)
|
||||
opportunity_record.delete()
|
||||
if request.is_ajax():
|
||||
return JsonResponse({'error': False})
|
||||
return HttpResponseRedirect(reverse('oppurtunities:list'))
|
||||
|
||||
|
||||
def contacts(request):
|
||||
acc = request.GET["Account"]
|
||||
account_contact = Account.objects.filter(id=acc)
|
||||
contacts = Contact.objects.filter(account=account_contact)
|
||||
data = {}
|
||||
for i in contacts:
|
||||
new = {i.pk: i.name}
|
||||
data.update(new)
|
||||
return JsonResponse(data)
|
||||
|
||||
|
||||
@login_required
|
||||
def editdetails(request):
|
||||
eid = request.POST.get("tid")
|
||||
edata = get_object_or_404(Opportunity, id=eid)
|
||||
account = 0
|
||||
if edata.account:
|
||||
account = edata.account.id
|
||||
con = Contact.objects.filter(account=account)
|
||||
selcon = edata.contacts.all()
|
||||
print ("selcon", selcon)
|
||||
contactsHtml = render(request, "oppurtunity/opp_contacts.html", {
|
||||
"con": con, "selcon": selcon})
|
||||
data = {"name": edata.name, "stage": edata.stage, "close_date": edata.close_date,
|
||||
"sources": edata.lead_source, "probability": edata.probability,
|
||||
"description": edata.description, "account": account, "eid": eid, }
|
||||
data['contacts'] = str(contactsHtml.content)
|
||||
opp_account = request.GET["account"]
|
||||
if opp_account:
|
||||
account = get_object_or_404(Account, id=opp_account)
|
||||
contacts = Contact.objects.filter(account=account)
|
||||
else:
|
||||
contacts = Contact.objects.all()
|
||||
data = {}
|
||||
for i in contacts:
|
||||
new = {i.pk: i.first_name}
|
||||
data.update(new)
|
||||
return JsonResponse(data)
|
||||
|
||||
|
||||
@login_required
|
||||
def opp_display(request):
|
||||
page = request.GET.get('per_page')
|
||||
count = Opportunity.objects.count()
|
||||
accounts = Account.objects.all()
|
||||
contacts = Contact.objects.all()
|
||||
opportunity = Opportunity.objects.all()
|
||||
if request.method == 'GET':
|
||||
if request.GET.get('name'):
|
||||
opportunity = Opportunity.objects.filter(
|
||||
name__contains=request.GET.get('name'))
|
||||
if request.GET.get('stage'):
|
||||
opportunity = opportunity.filter(
|
||||
stage=request.GET.get('stage'))
|
||||
if request.GET.get('lead_source'):
|
||||
opportunity = opportunity.filter(
|
||||
lead_source=request.GET.get('lead_source'))
|
||||
if request.GET.get('account'):
|
||||
opportunity = opportunity.filter(
|
||||
account=request.GET.get('account'))
|
||||
if request.GET.get('contacts'):
|
||||
opportunity = opportunity.filter(
|
||||
contacts=request.GET.get('contacts'))
|
||||
return render(request, 'oppurtunity/opportunity.html', {
|
||||
'opportunity': opportunity, 'stages': STAGES,
|
||||
'sources': SOURCES, 'accounts': accounts, 'per_page': page,
|
||||
'contacts': contacts, 'teams': TEAMS, 'count': count})
|
||||
else:
|
||||
return render(request, "oppurtunity/opportunity.html", {
|
||||
'opportunity': opportunity, 'stages': STAGES, 'sources': SOURCES,
|
||||
'per_page': page, 'accounts': accounts, 'teams': TEAMS,
|
||||
'contacts': contacts, 'count': count})
|
||||
# CRUD Operations Ends
|
||||
# Comments Section Start
|
||||
|
||||
|
||||
@login_required
|
||||
def opp_delete(request, opp_id):
|
||||
Opportunity.objects.filter(id=opp_id).delete()
|
||||
if request.is_ajax():
|
||||
return HttpResponse(json.dumps({'error': False}))
|
||||
return HttpResponseRedirect('/oppurtunities/list/')
|
||||
|
||||
|
||||
@login_required
|
||||
def opp_view(request, opp_id):
|
||||
view_record = get_object_or_404(Opportunity, id=opp_id)
|
||||
comments = Comments.objects.filter(oppid=opp_id).order_by('-id')
|
||||
users = User.objects.all()
|
||||
accunt = Account.objects.all()
|
||||
contact = view_record.contacts.all()
|
||||
return render(request, 'oppurtunity/view_opportunity.html', {
|
||||
'opp': view_record, 'stages': STAGES,
|
||||
'sources': SOURCES, 'accunt': accunt, 'teams': TEAMS,
|
||||
'users': users, 'contact': contact, "comments": comments})
|
||||
|
||||
|
||||
@login_required
|
||||
def opp_edit(request, opp_id):
|
||||
edata = get_object_or_404(Opportunity, id=opp_id)
|
||||
selcon = edata.contacts.all()
|
||||
con = Contact.objects.filter(account=edata.account)
|
||||
edit_opp = "editing"
|
||||
accunt = Account.objects.all()
|
||||
def add_comment(request):
|
||||
if request.method == 'POST':
|
||||
eid = get_object_or_404(Opportunity, id=opp_id)
|
||||
form = OpportunityForm(request.POST, instance=eid)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
if request.is_ajax():
|
||||
return HttpResponse(json.dumps({'error': False}))
|
||||
return redirect("/oppurtunities/list")
|
||||
else:
|
||||
if request.is_ajax():
|
||||
return JsonResponse({'error': True, 'errors_case': form.errors})
|
||||
return render(request, "oppurtunity/view_opportunity.html", {
|
||||
"opp": edata, "con": con, "accunt": accunt, "selcon": selcon,
|
||||
"edit_opp": edit_opp})
|
||||
assigned_user = "None"
|
||||
if edata.assigned_user:
|
||||
assigned_user = edata.get_assigned_user
|
||||
users = User.objects.filter(is_active=True)
|
||||
return render(request, "oppurtunity/view_opportunity.html", {
|
||||
"opp": edata, "con": con, "accunt": accunt, "selcon": selcon,
|
||||
"edit_opp": edit_opp, "users": users, "assigned_user": assigned_user})
|
||||
|
||||
|
||||
def comment_add(request):
|
||||
if request.method == 'POST':
|
||||
opp = get_object_or_404(Opportunity, id=request.POST.get('oppid'))
|
||||
assigned = False
|
||||
if opp.assigned_user:
|
||||
assigned = (int(opp.assigned_user) == request.user)
|
||||
if request.user == opp.users or assigned:
|
||||
form = CommentForm(request.POST)
|
||||
opportunity = get_object_or_404(Opportunity, id=request.POST.get('opportunityid'))
|
||||
if request.user in opportunity.assigned_to.all() or request.user == opportunity.created_by:
|
||||
form = OpportunityCommentForm(request.POST)
|
||||
if form.is_valid():
|
||||
comment = request.POST.get('comment')
|
||||
comment_user = request.user
|
||||
oppid = request.POST.get('oppid')
|
||||
c = Comments.objects.create(comment=comment, oppid=Opportunity.objects.get(id=oppid), comment_user=comment_user)
|
||||
data = {"com_id": c.id, "comment": c.comment,
|
||||
"comment_time": c.comment_time,
|
||||
"com_user": c.comment_user.username}
|
||||
opportunity_comment = form.save(commit=False)
|
||||
opportunity_comment.comment = request.POST.get('comment')
|
||||
opportunity_comment.commented_by = request.user
|
||||
opportunity_comment.opportunity = opportunity
|
||||
opportunity_comment.save()
|
||||
data = {"comment_id": opportunity_comment.id, "comment": opportunity_comment.comment,
|
||||
"commented_on": opportunity_comment.commented_on,
|
||||
"commented_by": opportunity_comment.commented_by.email}
|
||||
return JsonResponse(data)
|
||||
else:
|
||||
return JsonResponse({"error": form['comment'].errors})
|
||||
|
|
@ -189,17 +230,17 @@ def comment_add(request):
|
|||
|
||||
|
||||
@login_required
|
||||
def comment_edit(request):
|
||||
def edit_comment(request):
|
||||
if request.method == "POST":
|
||||
comment = request.POST.get('comment')
|
||||
comment_id = request.POST.get("commentid")
|
||||
com = get_object_or_404(Comments, id=comment_id)
|
||||
form = CommentForm(request.POST)
|
||||
if request.user == com.comment_user:
|
||||
comment_object = get_object_or_404(Comment, id=comment_id)
|
||||
form = OpportunityCommentForm(request.POST)
|
||||
if request.user == comment_object.commented_by:
|
||||
if form.is_valid():
|
||||
com.comment = comment
|
||||
com.save()
|
||||
data = {"comment": com.comment, "commentid": comment_id}
|
||||
comment_object.comment = comment
|
||||
comment_object.save()
|
||||
data = {"comment": comment_object.comment, "commentid": comment_id}
|
||||
return JsonResponse(data)
|
||||
else:
|
||||
return JsonResponse({"error": form['comment'].errors})
|
||||
|
|
@ -210,13 +251,13 @@ def comment_edit(request):
|
|||
|
||||
|
||||
@login_required
|
||||
def comment_remove(request):
|
||||
def remove_comment(request):
|
||||
if request.method == 'POST':
|
||||
comment_id = request.POST.get('comment_id')
|
||||
c = get_object_or_404(Comments, id=comment_id)
|
||||
if request.user == c.comment_user:
|
||||
get_object_or_404(Comments, id=comment_id).delete()
|
||||
data = {"oid": comment_id}
|
||||
comment_object = get_object_or_404(Comment, id=comment_id)
|
||||
if request.user == comment_object.commented_by:
|
||||
get_object_or_404(Comment, id=comment_id).delete()
|
||||
data = {"cid": comment_id}
|
||||
return JsonResponse(data)
|
||||
else:
|
||||
return JsonResponse({"error": "You Dont have permisions to delete"})
|
||||
|
|
@ -224,15 +265,14 @@ def comment_remove(request):
|
|||
return HttpResponse("Something Went Wrong")
|
||||
|
||||
|
||||
# Comments Section Start
|
||||
# Other Views
|
||||
|
||||
|
||||
@login_required
|
||||
def get_opportunity(request):
|
||||
if request.method == 'GET':
|
||||
if request.user.is_authenticated():
|
||||
opportunities = Opportunity.objects.all()
|
||||
return render(request, 'oppurtunity/opportunities_list.html', {
|
||||
'opportunities': opportunities})
|
||||
else:
|
||||
return HttpResponseRedirect('accounts/login')
|
||||
opportunities = Opportunity.objects.all()
|
||||
return render(request, 'oppurtunity/opportunities_list.html', {'opportunities': opportunities})
|
||||
else:
|
||||
return HttpResponse('Invalid Method or Not Authanticated in load_calls')
|
||||
return HttpResponse('Oops!! Something Went Wrong.. in load_calls')
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import datetime
|
|||
from django.utils import timezone
|
||||
from django.test import TestCase
|
||||
from planner.models import Event
|
||||
from common.models import User
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
|
||||
class EventObjects(object):
|
||||
|
|
@ -14,14 +14,14 @@ class EventObjects(object):
|
|||
|
||||
self.meeting = Event.objects.create(event_type='Meeting', name='llll', status='Not Held',
|
||||
description='addsdasda', start_date=timezone.now(),
|
||||
close_date=timezone.now() + datetime.timedelta(days=5), created_by=self.user)
|
||||
close_date=timezone.now() + datetime.timedelta(days=5), created_user=self.user)
|
||||
self.task = Event.objects.create(event_type='Task', name='dddl', status='Not Held',
|
||||
description='addsdasda', start_date=timezone.now(),
|
||||
close_date=timezone.now() + datetime.timedelta(days=1), created_by=self.user)
|
||||
close_date=timezone.now() + datetime.timedelta(days=1), created_user=self.user)
|
||||
self.call = Event.objects.create(event_type='Call', name='asdfjkas dfasdfa 555',
|
||||
status='Held',
|
||||
description='addsdasda', start_date=timezone.now(),
|
||||
close_date=timezone.now() + datetime.timedelta(days=2), created_by=self.user)
|
||||
close_date=timezone.now() + datetime.timedelta(days=2), created_user=self.user)
|
||||
|
||||
|
||||
class EventCreateTestCase(EventObjects, TestCase):
|
||||
|
|
@ -209,14 +209,14 @@ class EventsGetViewsTestCase(EventObjects, TestCase):
|
|||
response = self.client.post('/planner/get/task/', {
|
||||
'taskID': self.task.id
|
||||
})
|
||||
self.assertEqual(response.status_code, 404)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual('Task', response.json()['task']['event_type'])
|
||||
|
||||
def test_get_task_invalidID(self):
|
||||
response = self.client.post('/planner/get/task/', {
|
||||
'taskID': 6
|
||||
})
|
||||
self.assertEqual(response.status_code, 404)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual({'Event': 'DoesNotExist'}, response.json())
|
||||
|
||||
def test_get_call_validID(self):
|
||||
|
|
|
|||
101
static/js/contacts/view_contact.js
Normal file
101
static/js/contacts/view_contact.js
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
function getCookie(name) {
|
||||
var cookieValue = null;
|
||||
if (document.cookie && document.cookie != '') {
|
||||
var cookies = document.cookie.split(';');
|
||||
for (var i = 0; i < cookies.length; i++) {
|
||||
var cookie = jQuery.trim(cookies[i]);
|
||||
// Does this cookie string begin with the name we want?
|
||||
if (cookie.substring(0, name.length + 1) == (name + '=')) {
|
||||
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return cookieValue;
|
||||
}
|
||||
|
||||
$("#comment_form").submit(function (e) {
|
||||
e.preventDefault()
|
||||
var formData = new FormData($("#comment_form")[0]);
|
||||
$.ajax({
|
||||
url: "/contacts/comment/add/",
|
||||
type: "POST",
|
||||
data: formData,
|
||||
cache: false,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
success: function (data) {
|
||||
if (data.error) {
|
||||
$("#CommentError").html(data.error).show()
|
||||
} else {
|
||||
d = new Date(data.commented_on);
|
||||
$("#comments_div").prepend("<li class='list-group-item list-row' id='comment" + data.comment_id + "'>" +
|
||||
"<div class='pull-right right-container'>" +
|
||||
"<div class='list-row-buttons btn-group pull-right'>" +
|
||||
"<button class='btn btn-link btn-sm dropdown-toggle' data-toggle='dropdown' type='button'><span class='caret'></span></button>" +
|
||||
"<ul class='dropdown-menu pull-right'>" +
|
||||
"<li><a class='action' onclick='edit_comment(" + data.comment_id + ")'>Edit</a></li>" +
|
||||
"<li><a class='action' onclick='remove_comment(" + data.comment_id + ")''>Remove</a></li></ul></div></div>" +
|
||||
"<div class='stream-head-container'> " + data.commented_by + " Commented</div>" +
|
||||
"<div class='stream-post-container' id='comment_name" + data.comment_id + "'><pre>" + data.comment + "</pre></div>" +
|
||||
"<div class='stream-date-container" + data.comment_id + "'>" + d.toGMTString() + "</div></div><div class='stream-date-container' id='comment_file_div" + data.comment_id + "'><div id='new_comment" + data.comment_id + "'</div></div></li>"
|
||||
)
|
||||
$("#id_comments").val("")
|
||||
alert("Comment Submitted")
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
function edit_comment(x) {
|
||||
$('#Comments_Contacts_Modal').modal('show');
|
||||
comment = $("#comment_name" + x).text()
|
||||
$("#commentid").val(x)
|
||||
$("#id_editcomment").val(comment)
|
||||
}
|
||||
|
||||
$("#comment_edit").click(function (e) {
|
||||
e.preventDefault()
|
||||
var formData = new FormData($("#comment_edit_form")[0]);
|
||||
$.ajax({
|
||||
url: "/contacts/comment/edit/",
|
||||
type: "POST",
|
||||
data: formData,
|
||||
cache: false,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
success: function (data) {
|
||||
if (data.error) {
|
||||
$("#CommentEditError").html(data.error).show()
|
||||
} else {
|
||||
$("#comment_name" + data.commentid).html('<pre>' + data.comment + '</pre>')
|
||||
$('#Comments_Contacts_Modal').modal('hide');
|
||||
$("#id_editcomment").val("")
|
||||
$("#CommentEditError").hide()
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
function HideError(e) {
|
||||
$("#CommentError").hide()
|
||||
}
|
||||
|
||||
function remove_comment(x) {
|
||||
var csrftoken = getCookie('csrftoken');
|
||||
var con = confirm("Do you want to Delete it for Sure!?")
|
||||
if (con == true) {
|
||||
$.post('/contacts/comment/remove/', {
|
||||
"comment_id": x,
|
||||
"csrfmiddlewaretoken": csrftoken,
|
||||
}, function (data) {
|
||||
if (data.error) {
|
||||
alert(data.error)
|
||||
} else {
|
||||
$("#comment" + data.cid).remove()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
101
static/js/opportunities/view_opportunity.js
Normal file
101
static/js/opportunities/view_opportunity.js
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
function getCookie(name) {
|
||||
var cookieValue = null;
|
||||
if (document.cookie && document.cookie != '') {
|
||||
var cookies = document.cookie.split(';');
|
||||
for (var i = 0; i < cookies.length; i++) {
|
||||
var cookie = jQuery.trim(cookies[i]);
|
||||
// Does this cookie string begin with the name we want?
|
||||
if (cookie.substring(0, name.length + 1) == (name + '=')) {
|
||||
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return cookieValue;
|
||||
}
|
||||
|
||||
$("#comment_form").submit(function (e) {
|
||||
e.preventDefault()
|
||||
var formData = new FormData($("#comment_form")[0]);
|
||||
$.ajax({
|
||||
url: "/oppurtunities/comment/add/",
|
||||
type: "POST",
|
||||
data: formData,
|
||||
cache: false,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
success: function (data) {
|
||||
if (data.error) {
|
||||
$("#CommentError").html(data.error).show()
|
||||
} else {
|
||||
d = new Date(data.commented_on);
|
||||
$("#comments_div").prepend("<li class='list-group-item list-row' id='comment" + data.comment_id + "'>" +
|
||||
"<div class='pull-right right-container'>" +
|
||||
"<div class='list-row-buttons btn-group pull-right'>" +
|
||||
"<button class='btn btn-link btn-sm dropdown-toggle' data-toggle='dropdown' type='button'><span class='caret'></span></button>" +
|
||||
"<ul class='dropdown-menu pull-right'>" +
|
||||
"<li><a class='action' onclick='edit_comment(" + data.comment_id + ")'>Edit</a></li>" +
|
||||
"<li><a class='action' onclick='remove_comment(" + data.comment_id + ")''>Remove</a></li></ul></div></div>" +
|
||||
"<div class='stream-head-container'> " + data.commented_by + " Commented</div>" +
|
||||
"<div class='stream-post-container' id='comment_name" + data.comment_id + "'><pre>" + data.comment + "</pre></div>" +
|
||||
"<div class='stream-date-container" + data.comment_id + "'>" + d.toGMTString() + "</div></div><div class='stream-date-container' id='comment_file_div" + data.comment_id + "'><div id='new_comment" + data.comment_id + "'</div></div></li>"
|
||||
)
|
||||
$("#id_comments").val("")
|
||||
alert("Comment Submitted")
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
function edit_comment(x) {
|
||||
$('#Comments_Opportunity_Modal').modal('show');
|
||||
comment = $("#comment_name" + x).text()
|
||||
$("#commentid").val(x)
|
||||
$("#id_editcomment").val(comment)
|
||||
}
|
||||
|
||||
$("#comment_edit").click(function (e) {
|
||||
e.preventDefault()
|
||||
var formData = new FormData($("#comment_edit_form")[0]);
|
||||
$.ajax({
|
||||
url: "/oppurtunities/comment/edit/",
|
||||
type: "POST",
|
||||
data: formData,
|
||||
cache: false,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
success: function (data) {
|
||||
if (data.error) {
|
||||
$("#CommentEditError").html(data.error).show()
|
||||
} else {
|
||||
$("#comment_name" + data.commentid).html('<pre>' + data.comment + '</pre>')
|
||||
$('#Comments_Opportunity_Modal').modal('hide');
|
||||
$("#id_editcomment").val("")
|
||||
$("#CommentEditError").hide()
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
function HideError(e) {
|
||||
$("#CommentError").hide()
|
||||
}
|
||||
|
||||
function remove_comment(x) {
|
||||
var csrftoken = getCookie('csrftoken');
|
||||
var con = confirm("Do you want to Delete it for Sure!?")
|
||||
if (con == true) {
|
||||
$.post('/oppurtunities/comment/remove/', {
|
||||
"comment_id": x,
|
||||
"csrfmiddlewaretoken": csrftoken,
|
||||
}, function (data) {
|
||||
if (data.error) {
|
||||
alert(data.error)
|
||||
} else {
|
||||
$("#comment" + data.cid).remove()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -1,220 +1,142 @@
|
|||
{% extends 'base.html' %}
|
||||
{% load staticfiles %}
|
||||
{% block content %}
|
||||
{% load paginate %}
|
||||
{% block content %}
|
||||
<!-- main_container starts here -->
|
||||
<div class="main_container">
|
||||
|
||||
<!-- heading_create starts here -->
|
||||
<div class="row marl heading_create">
|
||||
<div class="heading col-md-2"><h4>Accounts</h4></div>
|
||||
<div class="col-md-7">
|
||||
<div class="row marl search-row">
|
||||
<div class="form-group col-md-8 col-sm-8">
|
||||
<div class="input-group">
|
||||
<div class="input-group-btn left-dropdown">
|
||||
<button type="button" class="btn dropdown-toggle filters-button btn-default" title="Filter" data-toggle="dropdown" tabindex="-1" aria-expanded="false">
|
||||
<span class="filters-label">All</span>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu pull-left filter-menu">
|
||||
|
||||
<li><a class="preset" tabindex="-1" href="javascript:" data-name="" data-action="selectPreset"><span class="glyphicon glyphicon-ok pull-right"></span><div>All</div></a></li>
|
||||
<li><a class="preset" tabindex="-1" href="javascript:" data-name="portalUsers" data-action="selectPreset"><div>Portal Users</div></a></li>
|
||||
<li class="divider preset-control hidden"></li>
|
||||
|
||||
|
||||
<li class="preset-control remove-preset hidden"><a tabindex="-1" href="#" data-action="removePreset">Remove Filter</a></li>
|
||||
<li class="preset-control save-preset hidden"><a tabindex="-1" href="#" data-action="savePreset">Save Filter</a></li>
|
||||
<li class="divider"></li>
|
||||
|
||||
<li class="checkbox"><label><input type="checkbox" data-role="boolFilterCheckbox" name="onlyMy">
|
||||
Only My</label></li>
|
||||
<li class="checkbox"><label><input type="checkbox" data-role="boolFilterCheckbox" name="followed"> Followed</label></li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="text" class="form-control text-filter" name="textFilter" value="" tabindex="1">
|
||||
<div class="input-group-btn">
|
||||
<button type="button" class="btn btn-primary search btn-icon" data-action="search">
|
||||
<span class="glyphicon glyphicon-search"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- heading_create starts here -->
|
||||
<div class="row marl heading_create">
|
||||
<div class="heading col-md-12">
|
||||
<div class="col-md-6">
|
||||
<h4>Accounts</h4>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="create_new text-right">
|
||||
<a href="{% url 'accounts:new_account' %}"><i class="fa fa-plus"></i> Add New Account</a>
|
||||
</div>
|
||||
<div class="form-group col-md-4 col-sm-4">
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default extra_option_btn" data-action="reset">
|
||||
<span class="glyphicon glyphicon-repeat"></span> Reset
|
||||
</button>
|
||||
<button type="button" class="btn btn-default dropdown-toggle extra_option_btn add-filter-button" data-toggle="dropdown" tabindex="-1">
|
||||
Add Field <span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu pull-right filter-list">
|
||||
<li data-name="account" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="account">Account</a></li>
|
||||
<li data-name="address" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="address">Address</a></li>
|
||||
<li data-name="assignedUser" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="assignedUser">Assigned User</a></li>
|
||||
<li data-name="createdAt" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="createdAt">Created At</a></li>
|
||||
<li data-name="emailAddress" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="emailAddress">Email</a></li>
|
||||
<li data-name="phoneNumber" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="phoneNumber">Phone</a></li>
|
||||
<li data-name="title" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="title">Title</a></li>
|
||||
<li data-name="teams" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="teams">Teams</a></li>
|
||||
<li data-name="targetLists" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="targetLists">Target Lists</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="create_new col-md-3 text-right">
|
||||
<a href="/accounts/create/"><i class="fa fa-plus"></i> Add New Account</a>
|
||||
</div>
|
||||
<!-- heading_create ends here -->
|
||||
<!-- filter_row starts here -->
|
||||
<div class="filter_row row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
</div>
|
||||
</div>
|
||||
<!-- heading_create ends here -->
|
||||
<!-- filter_row starts here -->
|
||||
<div class="filter_row row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading" style="text-align:center;">
|
||||
FILTERS
|
||||
</div>
|
||||
<form id="accounts_filter" method="GET" action="" >{% csrf_token %}
|
||||
<div class="panel-content">
|
||||
<div class="filter_col col-md-3">
|
||||
<form id="accounts_filter" method="POST" action="">{% csrf_token %}
|
||||
<div class="panel-content text-center">
|
||||
<div class="filter_col col-md-4">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Name</label>
|
||||
<input type="text" class="form-control" placeholder="Account Name" name="name" {% if request.GET %} value="{{request.GET.name}}" {% endif %}/>
|
||||
<label for="exampleInputEmail1">NAME</label>
|
||||
<input type="text" class="form-control" placeholder="Account Name" name="name" {% if request.POST %} value="{{request.POST.name}}" {%endif%}/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-3">
|
||||
<div class="filter_col col-md-4">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">City</label>
|
||||
<input type="text" class="form-control" placeholder="City" name="city" {% if request.GET %} value="{{request.GET.city}}" {% endif %}/>
|
||||
<label for="exampleInputEmail1">CITY</label>
|
||||
<input type="text" class="form-control" placeholder="City" name="city" {% if request.POST %} value="{{request.POST.city}}" {%endif%}/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-3">
|
||||
<div class="filter_col col-md-4">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Account Type</label>
|
||||
<select class="form-control" id="id_account_type" name="account_type" >
|
||||
<option value="" selected >--Select Type of Account--</option>
|
||||
{% for type in types %}
|
||||
<option value="{{type.0}}" {% if request.GET.account_type %} {% ifequal type.0 request.GET.account_type %} selected {% endifequal %}{% endif %} >{{type.1}} </option>
|
||||
{% endfor%}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-3">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Industry</label>
|
||||
<label for="exampleInputEmail1">INDUSTRY</label>
|
||||
<select class="form-control" id="id_industry" name="industry" >
|
||||
<option value="">--Select Type of Industry--</option>
|
||||
{% for ind in industries %}
|
||||
<option value="{{ind.0}}" {% if request.GET.industry %} {% ifequal ind.0 request.GET.industry %} selected {% endifequal %}{% endif %} >{{ind.1}} </option>
|
||||
{% endfor%}
|
||||
{% for each_industry in industries %}
|
||||
<option value="{{each_industry.0}}" {% if request.POST.industry %} {% ifequal each_industry.0 request.POST.industry %}selected{% endifequal %}{% endif %} >{{each_industry.1}} </option>
|
||||
{% endfor%}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-5"></div>
|
||||
<button class="btn btn-primary save" id="filters_search" type="submit">Search</button>
|
||||
<a href="/accounts/list/"><button type="button" class="btn btn-default">Clear</button></a>
|
||||
</div>
|
||||
</form>
|
||||
<br clear="all">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- filter_row ends here -->
|
||||
<form method='GET' class="accountdetails_row">
|
||||
<div class="table_container_row row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading-list text-center">
|
||||
LIST OF ACCOUNTS
|
||||
<span class="pull-right total_count">Total Accounts {{count}} </span>
|
||||
</div>
|
||||
<div class="panel-content">
|
||||
{% ifequal accounts_list|length 0 %}
|
||||
<h5 class="text-center">No Acccounts Data Found</h5>
|
||||
{% else %}
|
||||
<table class="table table-bordered table-striped table-condensed">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="3%" style="text-align:center;">S.No</th>
|
||||
<th width="20%" style="text-align:center;">NAME</th>
|
||||
<th width="15%" style="text-align:center;">CITY</th>
|
||||
<th width="15%" style="text-align:center;">ACCOUNT TYPE</th>
|
||||
<th width="15%" style="text-align:center;">INDUSTRY</th>
|
||||
<th width="10%" style="text-align:center;">ACTIONS</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% paginate 10 accounts_list as accounts_list %}
|
||||
{% for ac in accounts_list %}
|
||||
<tr id="account_details{{ac.id}}">
|
||||
<td scope="row" style="text-align:center;">{{ forloop.counter }}</td>
|
||||
<td style="text-align:center;"><a href="{% url 'accounts:view_account' ac.id %}">{{ ac.name }}</a></td>
|
||||
<td style="text-align:center;">{{ ac.billing_address.city }}</td>
|
||||
<td style="text-align:center;">{{ ac.account_type }}</td>
|
||||
<td style="text-align:center;">{{ ac.industry }}</td>
|
||||
<td>
|
||||
<div class="dropdown" style="text-align:center;">
|
||||
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Actions
|
||||
<span class="caret"></span></button>
|
||||
<ul class="dropdown-menu">
|
||||
<li style="text-align:center;"><a href="{% url 'accounts:view_account' ac.id %}">VIEW</a></li>
|
||||
<li style="text-align:center;"><a href="{% url 'accounts:edit_account' ac.id %}">EDIT</a></li>
|
||||
<li class="delete_account" style="text-align:center;"><a href="{% url 'accounts:remove_account' ac.id %}" id="remove_account">REMOVE</a></li>
|
||||
<!-- <li style="margin-left:20px" onclick="remove({{ac.id}})" id="remove{{ac.id}}">REMOVE</li> -->
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pagination_row text-center row marl">
|
||||
<ul class="pagination">
|
||||
{% show_pages %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endifequal %}
|
||||
<div class="filter_col text-center">
|
||||
<div class="form-group">
|
||||
<button class="btn btn-primary" type="submit">Search</button>
|
||||
<a href="{% url 'accounts:list' %}" class="btn btn-default">Clear</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<br clear="all">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- main_container ends here -->
|
||||
</div>
|
||||
<!-- filter_row ends here -->
|
||||
<!-- accounts list start -->
|
||||
<div class="table_container_row row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading-list text-center">
|
||||
LIST OF ACCOUNTS
|
||||
<span class="pull-right total_count">{% if show_pageitems %} {% show_pageitems %}{% else %}Total Accounts {{accounts_list|length}}{% endif %}</span>
|
||||
</div>
|
||||
<div class="panel-content">
|
||||
<table class="table table-bordered table-striped table-condensed">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="5%" style="text-align:center;">S.No</th>
|
||||
<th width="20%" style="text-align:center;">NAME</th>
|
||||
<th width="15%" style="text-align:center;">CITY</th>
|
||||
<th width="15%" style="text-align:center;">STATE</th>
|
||||
<th width="20%" style="text-align:center;">INDUSTRY</th>
|
||||
<th width="25%" style="text-align:center;">ACTIONS</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% if per_page %}
|
||||
{% paginate per_page accounts_list %}
|
||||
{% else%}
|
||||
{% paginate 10 accounts_list %}
|
||||
{% endif %}
|
||||
{% for each_account in accounts_list %}
|
||||
<tr id="account_details{{each_account.id}}" class="text-center">
|
||||
<td scope="row">{{ forloop.counter }}</td>
|
||||
<td>{% if each_account.name %}<a href="{% url 'accounts:view_account' each_account.id %}">{{ each_account.name }}</a>{% endif %}</td>
|
||||
<td>{% if each_account.billing_address.city %}{{ each_account.billing_address.city }} {% else %} Not specified {% endif %}</td>
|
||||
<td>{% if each_account.billing_address.state %}{{ each_account.billing_address.state }} {% else %} Not specified {% endif %}</td>
|
||||
<td>{% if each_account.industry %}{{ each_account.industry }} {% else %} Not specified {% endif %}</td>
|
||||
<td>
|
||||
<a href="{% url 'accounts:view_account' each_account.id %}" class="btn btn-info">VIEW</a>
|
||||
<a href="{% url 'accounts:edit_account' each_account.id %}" class="btn btn-success">EDIT</a>
|
||||
<a href="{% url 'accounts:remove_account' each_account.id %}" class="btn btn-danger remove_account">REMOVE</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% ifequal accounts_list|length 0 %}
|
||||
<h4 class="text-center">No Acccount Records Found</h4>
|
||||
{% endifequal %}
|
||||
<div class="text-center row marl">
|
||||
{% show_pages %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br clear="all">
|
||||
</div>
|
||||
</div>
|
||||
<!-- accounts list end -->
|
||||
</div>
|
||||
<!-- main_container ends here -->
|
||||
{% endblock %}
|
||||
|
||||
{% block js_block %}
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
$(document).ready(function(){
|
||||
$('#remove_account').click(function(e){
|
||||
var result = confirm("Are You Sure You Want to delete?");
|
||||
if (result==false) {
|
||||
e.preventDefault()
|
||||
}
|
||||
$('.remove_account').click(function(e){
|
||||
e.preventDefault()
|
||||
url = $(this).attr('href')
|
||||
if (!confirm('Are you sure you want to delete?'))
|
||||
return;
|
||||
window.location = $(this).attr('href')
|
||||
});
|
||||
});
|
||||
|
||||
/*function remove(acid){
|
||||
var result = confirm("Want to delete?");
|
||||
if (result) {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: '/accounts/delete/',
|
||||
data: {acid: acid},
|
||||
success: function(data){
|
||||
$("#account_details"+data.aid).remove()
|
||||
$(".total_count").html("Total Accounts "+data.count_list)
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
*/
|
||||
$(".reset").click(function(e){
|
||||
window.location = "{% url 'accounts:list'%}"
|
||||
});
|
||||
|
||||
$("a[rel='page']").click(function(e){
|
||||
e.preventDefault();
|
||||
$('#accounts_filter').attr("action", $(this).attr("href"));
|
||||
$('#accounts_filter').submit();
|
||||
});
|
||||
</script>
|
||||
|
||||
{% endblock js_block %}
|
||||
|
|
@ -1,109 +1,60 @@
|
|||
{% extends 'base.html' %}
|
||||
{% load staticfiles %}
|
||||
{% block content %}
|
||||
{% load paginate %}
|
||||
|
||||
{% block content %}
|
||||
<!-- main_container starts here -->
|
||||
<div class="main_container">
|
||||
<!-- heading_create starts here -->
|
||||
<div class="row marl heading_create">
|
||||
<div class="heading col-md-2">Contacts</div>
|
||||
<div class="col-md-7">
|
||||
<div class="row marl search-row">
|
||||
<div class="form-group col-md-8 col-sm-8">
|
||||
<div class="input-group">
|
||||
<div class="input-group-btn left-dropdown">
|
||||
<button type="button" class="btn dropdown-toggle filters-button btn-default" title="Filter" data-toggle="dropdown" tabindex="-1" aria-expanded="false">
|
||||
<span class="filters-label">All</span>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu pull-left filter-menu">
|
||||
|
||||
<li><a class="preset" tabindex="-1" href="javascript:" data-name="" data-action="selectPreset"><span class="glyphicon glyphicon-ok pull-right"></span><div>All</div></a></li>
|
||||
<li><a class="preset" tabindex="-1" href="javascript:" data-name="portalUsers" data-action="selectPreset"><div>Portal Users</div></a></li>
|
||||
<li class="divider preset-control hidden"></li>
|
||||
|
||||
|
||||
<li class="preset-control remove-preset hidden"><a tabindex="-1" href="#" data-action="removePreset">Remove Filter</a></li>
|
||||
<li class="preset-control save-preset hidden"><a tabindex="-1" href="#" data-action="savePreset">Save Filter</a></li>
|
||||
<li class="divider"></li>
|
||||
|
||||
<li class="checkbox"><label><input type="checkbox" data-role="boolFilterCheckbox" name="onlyMy">
|
||||
Only My</label></li>
|
||||
<li class="checkbox"><label><input type="checkbox" data-role="boolFilterCheckbox" name="followed"> Followed</label></li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="text" class="form-control text-filter" name="textFilter" value="" tabindex="1">
|
||||
<div class="input-group-btn">
|
||||
<button type="button" class="btn btn-primary search btn-icon" data-action="search"><span class="glyphicon glyphicon-search"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group col-md-4 col-sm-4">
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default extra_option_btn" data-action="reset"><span class="glyphicon glyphicon-repeat"></span> Reset
|
||||
</button>
|
||||
<button type="button" class="btn btn-default dropdown-toggle extra_option_btn add-filter-button" data-toggle="dropdown" tabindex="-1">Add Field<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu pull-right filter-list">
|
||||
<li data-name="account" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="account">Account</a></li>
|
||||
<li data-name="address" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="address">Address</a></li>
|
||||
<li data-name="assignedUser" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="assignedUser">Assigned User</a></li>
|
||||
<li data-name="createdAt" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="createdAt">Created At</a></li>
|
||||
<li data-name="emailAddress" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="emailAddress">Email</a></li>
|
||||
<li data-name="phoneNumber" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="phoneNumber">Phone</a></li>
|
||||
<li data-name="title" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="title">Title</a></li>
|
||||
<li data-name="teams" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="teams">Teams</a></li>
|
||||
<li data-name="targetLists" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="targetLists">Target Lists</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="heading col-md-12">
|
||||
<div class="col-md-6">
|
||||
<h4>Contacts</h4>
|
||||
</div>
|
||||
<div class="create_new col-md-3 text-right">
|
||||
<a href="{% url 'contacts:add_contact'%}"><i class="fa fa-plus"></i> Add New Contact</a>
|
||||
<div class="col-md-6">
|
||||
<div class="create_new text-right">
|
||||
<a href="{% url 'contacts:add_contact'%}"><i class="fa fa-plus"></i> Add New Contact</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- heading_create ends here -->
|
||||
<!-- filter_row starts here -->
|
||||
<div class="filter_row row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading" style="text-align:center;">
|
||||
filters
|
||||
<div class="panel-heading">
|
||||
</div>
|
||||
<form action="" method='GET'>{%csrf_token%}
|
||||
<div class="panel-content">
|
||||
<div class="filter_col col-md-3">
|
||||
<form id="contacts_filter" action="" method="POST">{%csrf_token%}
|
||||
<div class="panel-content text-center">
|
||||
<div class="filter_col col-md-4">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Name</label>
|
||||
<input type="text" class="form-control" placeholder="name" name="name" value="{{request.GET.name}}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-3">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Accounts</label>
|
||||
<label for="exampleInputEmail1">ACCOUNTS</label>
|
||||
<select class="form-control" id="id_account" name="account">
|
||||
<option value="" selected="selected">---------</option>
|
||||
{% for i in acount %}
|
||||
<option value="{{i.id}}" {%ifequal i.id request.GET.account|add:"0"%}selected{%endifequal%}>{{ i.name }}</option>
|
||||
<option value="" selected="selected">--Select an Account--</option>
|
||||
{% for account in accounts %}
|
||||
<option value="{{account.id}}" {%ifequal account.id request.POST.account|add:"0"%} selected {%endifequal%}>{{ account.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-3">
|
||||
<div class="filter_col col-md-4">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Email</label>
|
||||
<input type="text" class="form-control" placeholder="email" name="email" value="{{request.GET.email}}">
|
||||
<label for="exampleInputEmail1">NAME</label>
|
||||
<input type="text" class="form-control" placeholder="First Name" name="first_name" value="{{request.POST.first_name}}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-3">
|
||||
<div class="filter_col col-md-4">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">City</label>
|
||||
<input type="text" class="form-control" placeholder="city" name="city" value="{{request.GET.city}}">
|
||||
<label for="exampleInputEmail1">CITY</label>
|
||||
<input type="text" class="form-control" placeholder="City" name="city" value="{{request.POST.city}}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col text-center">
|
||||
<div class="form-group">
|
||||
<button class="btn btn-primary" type="submit">Search</button>
|
||||
<a href="{% url 'contacts:list' %}" class="btn btn-default">Clear</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-5"></div>
|
||||
<button class="btn btn-primary save" id="filters_search" type="submit">Search</button>
|
||||
<a href="{% url 'contacts:list' %}"><button class="btn btn-default" type="button">Clear</button></a>
|
||||
</div>
|
||||
</form>
|
||||
<br clear="all">
|
||||
|
|
@ -111,66 +62,95 @@
|
|||
</div>
|
||||
</div>
|
||||
<!-- filter_row ends here -->
|
||||
<!-- contacts list start -->
|
||||
<div class="table_container_row row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading-list text-center">
|
||||
LIST OF CONTACTS
|
||||
<span class="pull-right total_count">Total Contacts {{count}}</span>
|
||||
<span class="pull-right total_count">{% if show_pageitems %} {% show_pageitems %}{% else %}Total Contacts {{contact_obj_list|length}}{% endif %}</span>
|
||||
</div>
|
||||
<div class="panel-content">
|
||||
<table class="table table-bordered table-striped table-condensed">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="5%" class="text-center">S.No</th>
|
||||
<th width="20%" class="text-center">Name</th>
|
||||
<th width="20%" class="text-center">Account</th>
|
||||
<th width="25%" class="text-center">Email Address</th>
|
||||
<th width="20%" class="text-center">City</th>
|
||||
<th width="10%" class="text-center">Actions</th>
|
||||
<th width="5%" style="text-align:center;">S.No</th>
|
||||
<th width="20%" style="text-align:center;">NAME</th>
|
||||
<th width="20%" style="text-align:center;">ACCOUNT</th>
|
||||
<th width="15%" style="text-align:center;">CITY</th>
|
||||
<th width="15%" style="text-align:center;">STATE</th>
|
||||
<th width="25%" style="text-align:center;">ACTIONS</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% paginate 10 contacts as contacts %}
|
||||
{% for c in contacts %}
|
||||
<tr class="text-center">
|
||||
<td scope="row" style="text-align:center;">{{ forloop.counter }}</td>
|
||||
<td><a href="{% url 'contacts:view_contact' c.id %}">{{c.name}}</a></td>
|
||||
<td><a href="{% url 'accounts:view_account' c.account.id %}">{{c.account}}</a></td>
|
||||
<td>{{c.email}}</td>
|
||||
<td>{{c.address.city}}</td>
|
||||
{% if per_page %}
|
||||
{% paginate per_page contact_obj_list %}
|
||||
{% else%}
|
||||
{% paginate 10 contact_obj_list %}
|
||||
{% endif %}
|
||||
{% for contact in contact_obj_list %}
|
||||
<tr style="text-align:center;">
|
||||
<td scope="row">{{ forloop.counter }}</td>
|
||||
<td><a href="{% url 'contacts:view_contact' contact.id %}">{{contact.first_name}}</a></td>
|
||||
<td>
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Actions
|
||||
<span class="caret"></span></button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="{% url 'contacts:view_contact' c.id %}">view</a></li>
|
||||
<li><a href="{% url 'contacts:edit_contact' c.id%}">edit</a></li>
|
||||
<li><a href="{% url 'contacts:delete_contact' c.id %}">delete</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
{% if contact.account %}
|
||||
<a href="{% url 'accounts:view_account' contact.account.id %}">{{contact.account}}</a>
|
||||
{% else %}
|
||||
No Related Account
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if contact.address.city %}
|
||||
{{contact.address.city}}
|
||||
{% else %}
|
||||
Not Specified
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if contact.address.state %}
|
||||
{{contact.address.state}}
|
||||
{% else %}
|
||||
Not Specified
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<a href="{% url 'contacts:view_contact' contact.id %}" class="btn btn-info">View</a>
|
||||
<a href="{% url 'contacts:edit_contact' contact.id%}" class="btn btn-success">Edit</a>
|
||||
<a href="{% url 'contacts:remove_contact' contact.id %}" class="btn btn-danger delete">Delete</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor%}
|
||||
</tbody>
|
||||
</table>
|
||||
{% ifequal contacts|length 0 %}
|
||||
<h4>
|
||||
<center>No Contacts Found</center>
|
||||
</h4>
|
||||
{%else%}
|
||||
<div class="pagination_row marl row text-center">
|
||||
<nav aria-label="Page navigation">
|
||||
<ul class="pagination">
|
||||
{% show_pages %}
|
||||
</ul>
|
||||
</nav>
|
||||
{%ifequal contact_obj_list|length 0 %}
|
||||
<h4 class="text-center">No Contact Records Found</h4>
|
||||
{%endifequal%}
|
||||
<div class="marl row text-center">
|
||||
{% show_pages %}
|
||||
</div>
|
||||
{% endifequal %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br clear="all">
|
||||
</div>
|
||||
<!-- contacts list end -->
|
||||
</div>
|
||||
{%endblock%}
|
||||
<!-- main_container ends here -->
|
||||
{%endblock%}
|
||||
{% block js_block %}
|
||||
<script type="text/javascript">
|
||||
$('.delete').click(function(e){
|
||||
e.preventDefault()
|
||||
url = $(this).attr('href')
|
||||
if (!confirm('Are you sure you want to delete?'))
|
||||
return;
|
||||
window.location = $(this).attr('href')
|
||||
});
|
||||
|
||||
$("a[rel='page']").click(function(e){
|
||||
e.preventDefault();
|
||||
$('#contacts_filter').attr("action", $(this).attr("href"));
|
||||
$('#contacts_filter').submit();
|
||||
});
|
||||
</script>
|
||||
{% endblock js_block %}
|
||||
|
|
@ -1,154 +1,144 @@
|
|||
{% extends 'base.html' %}
|
||||
{% load staticfiles %}
|
||||
{% block breadcrumb %}
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="{% url 'contacts:list' %}">Contacts</a></li>
|
||||
<li class="active">{%if edit_obj%}Edit {%else%} Create {%endif%}</li>
|
||||
</ol>
|
||||
{%endblock%}
|
||||
{%block content%}
|
||||
<form id="add_form" method="post" action={% if edit_obj %}"{% url 'contacts:edit_contact' edit_obj.id%}"{% else %}"{% url 'contacts:add_contact' %}"{% endif%}>{%csrf_token%}
|
||||
<div class="assigned_teams row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
Assigned Users & Teams
|
||||
</div>
|
||||
<div class="panel-content">
|
||||
<div class="filter_col col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Assigned Users</label>
|
||||
<select class="form-control" id="id_users" name="users">
|
||||
<option value="" selected="selected">---------</option>
|
||||
{%for u in assigned_user%}
|
||||
<option value="{{u.id}}" {% ifequal u.id edit_obj.users_id %}selected{% endifequal %} {%ifequal u.id request.POST.users|add:"0"%}selected{%endifequal%}>{{u.username}}</option>
|
||||
{%endfor%}
|
||||
</select>
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="{% url 'contacts:list' %}">Contacts</a></li>
|
||||
<li class="active">Create</li>
|
||||
</ol>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<form id="add_form" method="POST" action='' novalidate>{%csrf_token%}
|
||||
<div class="assigned_teams row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
Assigned Users & Teams
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Teams</label>
|
||||
<select class="form-control" id="id_teams" name="teams">
|
||||
<option value="" selected="selected">---------</option>
|
||||
<option value="SALES" {% ifequal "SALES" edit_obj.teams %}selected{% endifequal %} {%ifequal "SALES" request.POST.teams%}selected{%endifequal%}> Sales</option>
|
||||
<option value="SUPPORT" {% ifequal "SUPPORT" edit_obj.teams %}selected{% endifequal %} {%ifequal "SUPPORT" request.POST.teams%}selected{%endifequal%}> Support</option>
|
||||
<option value="TOP MANAGEMENT" {% ifequal "TOP MANAGEMENT" edit_obj.teams %}selected{% endifequal %} {%ifequal "TOP MANAGEMENT" request.POST.teams%}selected{%endifequal%}> Top Management</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<br clear="all">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br clear="all">
|
||||
</div>
|
||||
<div class="overview_form_block row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
Overview
|
||||
</div>
|
||||
<div class="panel-content">
|
||||
<div class="row marl">
|
||||
<div class="col-md-6">
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="panel-content">
|
||||
<div class="filter_col col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Name</label> *
|
||||
<input type="text" class="form-control" id="id_name" name="name"
|
||||
value={%if edit_obj%}"{{edit_obj.name}}"{% else %}"{{request.POST.name}}"{%endif%}>
|
||||
{% if err_contct_form.name%}
|
||||
{{err_contct_form.name}}
|
||||
{% endif %}
|
||||
<label for="exampleInputEmail1">Assigned Users</label>
|
||||
{{ contact_form.assigned_to }}
|
||||
{{ contact_form.assigned_to.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="filter_col col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Accounts</label> *
|
||||
<select class="form-control" id="id_account" name="account">
|
||||
<option value="" selected="selected">---------</option>
|
||||
{% for i in acount %}
|
||||
<option value="{{i.id}}" {%ifequal i.id edit_obj.account_id %}selected {% endifequal %} {%ifequal i.id request.POST.account|add:"0"%}selected{%endifequal%}>{{ i.name }}</option>
|
||||
{% endfor %}
|
||||
{% if err_contct_form.account %}
|
||||
<option value="" selected="selected"></option>
|
||||
{%endif%}
|
||||
</select>
|
||||
{% if err_contct_form.account %}
|
||||
{{err_contct_form.account}}
|
||||
{% endif %}
|
||||
<label for="exampleInputEmail1">Teams</label>
|
||||
{{ contact_form.teams }}
|
||||
{{ contact_form.teams.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group ">
|
||||
<label for="exampleInputEmail1" >Phone</label> *
|
||||
<input type="text" class="form-control text-filter" id="id_phone" name="phone"
|
||||
value={%if edit_obj%}"{{edit_obj.phone}}" {% else %}"{{request.POST.phone}}"{%endif%}>
|
||||
{% if err_contct_form.phone %}
|
||||
{{err_contct_form.phone}}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group ">
|
||||
<label for="exampleInputEmail1" >Email Address</label> *
|
||||
<input type="text" class="form-control text-filter" id="id_email" name="email" value={%if edit_obj%}"{{edit_obj.email}}" {% else %}"{{request.POST.email}}"{%endif%}>
|
||||
{% if err_contct_form.email %}
|
||||
{{err_contct_form.email}}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1" >address</label>
|
||||
<input type="text" class="form-control" placeholder="Street" name="street" value={%if address_obj%}"{{address_obj.street}}" {% else %}"{{request.POST.street}}"{%endif%} id="id_street"/ >
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<input type="text" class="form-control" placeholder="City" name="city" value={%if address_obj%}"{{address_obj.city}}" {% else %}"{{request.POST.city}}"{%endif%} id="id_city" />
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<input type="text" class="form-control" placeholder="State" name="state" value={%if address_obj%}"{{address_obj.state}}" {% else %}"{{request.POST.state}}"{%endif%} id="id_state"/>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<input type="text" class="form-control" placeholder="Postcal Code" name="postcode" value={%if address_obj%}"{{address_obj.postcode}}" {% else %}"{{request.POST.postcode}}"{%endif%} id="id_postcode" /></br>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>country</label>
|
||||
<select class="form-control" id="id_country" name="country">
|
||||
<option value="" selected="selected">---------</option>
|
||||
{% for i in countri %}
|
||||
<option value="{{i.id}}" {%ifequal i.id address_obj.country_id %}selected {% endifequal %} {%ifequal i.id request.POST.country|add:"0"%}selected{%endifequal%}>{{ i.printable_name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col shiiping_block col-md-12">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group col-md-12">
|
||||
<label for="exampleInputEmail1" >Description</label>
|
||||
<textarea class="form-control" rows="3" id="id_description" name="description">{%if edit_obj%}{{edit_obj.description}} {% else %}{{request.POST.description}}{%endif%}</textarea>
|
||||
<br clear="all">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br clear="all">
|
||||
</div>
|
||||
<div class="row marl buttons_row text-center">
|
||||
<a><button class="btn btn-default save" type="submit">Save</button></a>
|
||||
<a href="{% url 'contacts:list' %}"><button class="btn btn-default" id= "create_contact_cancel" type="button">Cancel</button></a>
|
||||
<div class="overview_form_block row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
Overview
|
||||
</div>
|
||||
<div class="panel-content">
|
||||
<div class="row marl">
|
||||
<div class="col-md-6">
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1" class="required">Name</label>
|
||||
<div class="row">
|
||||
<div class="filter_col col-md-6">
|
||||
{{ contact_form.first_name }}
|
||||
{{ contact_form.first_name.errors }}
|
||||
</div>
|
||||
<div class="filter_col col-md-6">
|
||||
{{ contact_form.last_name }}
|
||||
{{ contact_form.last_name.errors }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Account</label>
|
||||
{{ contact_form.account }}
|
||||
{{ contact_form.account.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group ">
|
||||
<label for="exampleInputEmail1" class="required" >Phone</label>
|
||||
{{ contact_form.phone }}
|
||||
{{ contact_form.phone.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group ">
|
||||
<label for="exampleInputEmail1" class="required" >Email Address</label>
|
||||
{{ contact_form.email }}
|
||||
{{ contact_form.email.errors }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Address</label>
|
||||
{{ address_form.address_line }}
|
||||
{{ address_form.address_line.errors }}
|
||||
</div>
|
||||
{{ address_form.street }}
|
||||
{{ address_form.street.errors }}
|
||||
<div class="row" style="margin-top: 10px;">
|
||||
<div class="col-md-4">
|
||||
{{ address_form.city }}
|
||||
{{ address_form.city.errors }}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
{{ address_form.state }}
|
||||
{{ address_form.state.errors }}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
{{ address_form.postcode }}
|
||||
{{ address_form.postcode.errors }}
|
||||
</div>
|
||||
<div class="col-md-12" style="margin-top: 10px;">
|
||||
{{ address_form.country }}
|
||||
{{ address_form.country.errors }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br clear="all">
|
||||
<div class="col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Description</label>
|
||||
{{ contact_form.description }}
|
||||
{{ contact_form.description.errors }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" id="save_new_form" name="savenewform">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<br clear="all">
|
||||
</div>
|
||||
<div class="row marl buttons_row text-center">
|
||||
<button class="btn btn-default save" type="submit">Save</button>
|
||||
{% if not contact_obj %}
|
||||
<button class="btn btn-success save savenew" type="submit">Save & New</button>
|
||||
{% endif %}
|
||||
<a href="{% url 'contacts:list' %}" class="btn btn-default" id="create_contact_cancel">Cancel</a>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
||||
</head>
|
||||
</body>
|
||||
</html>
|
||||
{% block js_block %}
|
||||
<script type="text/javascript">
|
||||
$(".savenew").on('click', function(e){
|
||||
e.preventDefault()
|
||||
$("#save_new_form").val('true')
|
||||
$('#add_form').submit()
|
||||
});
|
||||
</script>
|
||||
{% endblock js_block %}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,16 +1,13 @@
|
|||
{% extends 'base.html' %}
|
||||
{% load staticfiles %}
|
||||
|
||||
<div class="main_container">
|
||||
{% block breadcrumb %}
|
||||
{% block breadcrumb %}
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="{% url 'leads:list' %}">Leads</a></li>
|
||||
<li class="active">Create</li>
|
||||
</ol>
|
||||
{%endblock%}
|
||||
{%block content%}
|
||||
|
||||
<form id="add_form" method="post" action={% if post %}"{% url 'leads:edit_lead' post.id%}"{% else %}"{% url 'leads:add_lead' %}"{% endif %}>{%csrf_token%}
|
||||
{% endblock %}
|
||||
{%block content%}
|
||||
<form id="add_form" method="POST" action="" novalidate>{%csrf_token%}
|
||||
<div class="assigned_teams row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
|
|
@ -21,23 +18,15 @@
|
|||
<div class="filter_col col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Assigned Users</label>
|
||||
<select class="form-control" id="id_assigned_user" name="assigned_user">
|
||||
<option value="" selected="selected">---------</option>
|
||||
{% for u in assigned_user %}
|
||||
<option value="{{u.id}}" {% ifequal u.id post.assigned_user_id %}selected{% endifequal %} {%ifequal u.id request.POST.assigned_user|add:"0"%}selected{%endifequal%}>{{u.username}}</option>
|
||||
{%endfor%}
|
||||
</select>
|
||||
{{ lead_form.assigned_to }}
|
||||
{{ lead_form.assigned_to.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Teams</label>
|
||||
<select class="form-control" id="id_teams" name="teams">
|
||||
<option value="" selected="selected">---------</option>
|
||||
{% for k in teams %}
|
||||
<option value="{{ k.0 }}" {% ifequal k.0 post.teams %} selected {% endifequal %} {%ifequal k.0 request.POST.teams %} selected {% endifequal %}>{{ k.1 }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
{{ lead_form.teams }}
|
||||
{{ lead_form.teams.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<br clear="all">
|
||||
|
|
@ -57,141 +46,127 @@
|
|||
<div class="col-md-6">
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Name</label> *
|
||||
<input type="text" class="form-control" placeholder=" Name" id="id_name" name="name" value={% if post %}"{{post.name}}"{% else %}"{{request.POST.name}}"{% endif %}>
|
||||
{% if error_lead_form.name %}
|
||||
<p>{{error_lead_form.name}}</p>
|
||||
{% endif %}
|
||||
<label for="exampleInputEmail1" class="name" >Name</label>
|
||||
<div class="row">
|
||||
<div class="filter_col col-md-6">
|
||||
{{ lead_form.first_name }}
|
||||
{{ lead_form.first_name.errors }}
|
||||
</div>
|
||||
<div class="filter_col col-md-6">
|
||||
{{ lead_form.last_name }}
|
||||
{{ lead_form.last_name.errors }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Accounts</label> *
|
||||
<select class="form-control" id="id_account" name="account">
|
||||
<option value="" selected="selected">---------</option>
|
||||
{% for i in acount %}
|
||||
<option value="{{i.id}}" {% ifequal i.id post.account_id %} selected {% endifequal %} {% ifequal i.id request.POST.account|add:"0" %} selected {% endifequal %}>{{ i.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
{% if error_lead_form.account %}
|
||||
<p>{{error_lead_form.account}}</p>
|
||||
{% endif %}
|
||||
<label for="exampleInputEmail1" {% if request.POST.status == "converted" %} class="required" {% endif %}>Account Name</label>
|
||||
{{ lead_form.account_name }}
|
||||
{{ lead_form.account_name.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Title</label>
|
||||
<input type="text" id="id_title" name="title" value="{{post.title}}" class="form-control" placeholder="title" />
|
||||
{% if error_lead_form.title %}
|
||||
<p>{{error_lead_form.title}}</p>
|
||||
{% endif %}
|
||||
{{ lead_form.title }}
|
||||
{{ lead_form.title.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group ">
|
||||
<label for="exampleInputEmail1">Phone</label> *
|
||||
<input type="text" class="form-control text-filter" id="id_phone" name="phone"value={%if post%}"{{post.phone}}" {% else %}"{{request.POST.phone}}"{%endif%}/>
|
||||
{% if error_lead_form.phone %}
|
||||
<p>{{error_lead_form.phone}}</p>
|
||||
{% endif %}
|
||||
<label for="exampleInputEmail1">Phone</label>
|
||||
{{ lead_form.phone }}
|
||||
{{ lead_form.phone.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group ">
|
||||
<label for="exampleInputEmail1" >Email Address</label> *
|
||||
<input type="text" class="form-control text-filter" id="id_email" name="email" {% if error_lead_form.email %} value="" {%endif%} value={%if post%}"{{post.email}}" {% else %}"{{request.POST.email}}"{% endif %}>
|
||||
{% if error_lead_form.email %}
|
||||
<p>{{error_lead_form.email}}</p>
|
||||
{% endif %}
|
||||
<label for="exampleInputEmail1" class="required">Email Address</label>
|
||||
{{ lead_form.email }}
|
||||
{{ lead_form.email.errors }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Status</label> *
|
||||
<select class="form-control" id="id_status" name="status">
|
||||
<option value="" selected="selected">----------</option>
|
||||
{% for k in status %}
|
||||
<option value="{{ k.0 }}" {%ifequal k.0 post.status %}selected {% endifequal %} {%ifequal k.0 request.POST.status%}selected{%endifequal%}>{{ k.1 }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
{% if error_lead_form.status %}
|
||||
<p>{{error_lead_form.status}}</p>
|
||||
{% endif %}
|
||||
<label for="exampleInputEmail1"/>Status</label>
|
||||
{{ lead_form.status }}
|
||||
{{ lead_form.status.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Source</label>
|
||||
<select class="form-control" name ="source" id = "id_source">
|
||||
<option value="" selected="selected">----------</option>
|
||||
{% for k in source %}
|
||||
<option value="{{ k.0 }}" {%ifequal k.0 post.source %}selected {% endifequal %} {%ifequal k.0 request.POST.source%}selected{%endifequal%}>{{ k.1 }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
{% if error_lead_form.source %}
|
||||
<p>{{error_lead_form.email}}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12 ">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Website</label>
|
||||
<input type="text" name="website" class="form-control" value="{{post.website}}"/>
|
||||
<label for="exampleInputEmail1"/>Source</label>
|
||||
{{ lead_form.source }}
|
||||
{{ lead_form.source.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1" >Address</label>
|
||||
<input type="text" class="form-control" placeholder="Street" name = "street" value = "{{post.address.street}}" id="id_street"/>
|
||||
{% if error_address_form %}
|
||||
<p>{{error_address_form.street}}</p>
|
||||
{% endif %}
|
||||
<div class="row lead_address_col" style="margin-top:10px;">
|
||||
<div class="col-md-4">
|
||||
<input type="text" class="form-control" placeholder="City" name="city" value = "{{post.address.city}}" id="id_city" />
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<input type="text" class="form-control" placeholder="State" name="state" value= "{{post.address.state}}" id="id_state"/>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<input type="text" class="form-control" placeholder="Postcal Code" name="postcode" value="{{post.address.postcode}}" id="id_postcode" /></br>
|
||||
</div>
|
||||
{{ address_form.address_line }}
|
||||
{{ address_form.address_line.errors }}
|
||||
</div>
|
||||
{{ address_form.street }}
|
||||
{{ address_form.street.errors }}
|
||||
<div class="row" style="margin-top:10px;">
|
||||
<div class="col-md-4">
|
||||
{{ address_form.city }}
|
||||
{{ address_form.city.errors }}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<select class="form-control" name="country" value="{{ ss.address.country}} "id = "id_country" />
|
||||
<option value="">--Country--</option>
|
||||
{% for k in countries %}
|
||||
<option required="required" value="{{ k.id }}" {% ifequal k.id post.address.country %} selected {% endifequal %}>{{ k.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div class="col-md-4">
|
||||
{{ address_form.state }}
|
||||
{{ address_form.state.errors }}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
{{ address_form.postcode }}
|
||||
{{ address_form.postcode.errors }}
|
||||
</div>
|
||||
<div class="col-md-12" style="margin-top:10px;">
|
||||
{{ address_form.country }}
|
||||
{{ address_form.country.errors }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row marl">
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Description</label>
|
||||
<textarea class="form-control" rows="3" id="id_description" name="description">
|
||||
{% if post %}
|
||||
{{ post.description }}
|
||||
{% else %}
|
||||
{{ request.POST.description }}
|
||||
{% endif %}
|
||||
</textarea>
|
||||
<label for="exampleInputEmail1">Website</label>
|
||||
{{ lead_form.website }}
|
||||
{{ lead_form.website.errors }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group col-md-12">
|
||||
<label for="exampleInputEmail1" >Description</label>
|
||||
{{ lead_form.description }}
|
||||
{{ lead_form.description.errors }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br clear="all">
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" id="save_new_form" name="savenewform">
|
||||
</div>
|
||||
<div class="row marl buttons_row text-center">
|
||||
<a><button class="btn btn-default save" type="submit">Save</button></a>
|
||||
<a href="{% url 'leads:list' %}"><button class="btn btn-default" id= "create_lead_cancel" type="button">Cancel</button></a>
|
||||
<button class="btn btn-default save" type="submit">Save</button>
|
||||
{% if not lead_obj %}
|
||||
<button class="btn btn-success save savenew" type="submit">Save & New</button>
|
||||
{% endif %}
|
||||
<a href="{% url 'leads:list' %}" class="btn btn-default" id="create_lead_cancel">Cancel</a>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
{% block js_block %}
|
||||
<script type="text/javascript">
|
||||
$(".savenew").on('click', function(e){
|
||||
e.preventDefault()
|
||||
$("#save_new_form").val('true')
|
||||
$('#add_form').submit()
|
||||
});
|
||||
</script>
|
||||
{% endblock js_block %}
|
||||
|
|
|
|||
|
|
@ -1,182 +1,139 @@
|
|||
{% extends 'base.html' %}
|
||||
{% load staticfiles %}
|
||||
{% block content %}
|
||||
{% load paginate %}
|
||||
|
||||
<div class="row marl heading_create">
|
||||
<div class="heading col-md-2">Leads</div>
|
||||
<div class="col-md-7">
|
||||
<div class="row marl search-row">
|
||||
<div class="form-group col-md-8 col-sm-8">
|
||||
<div class="input-group">
|
||||
<div class="input-group-btn left-dropdown">
|
||||
<button type="button" class="btn dropdown-toggle filters-button btn-default" title="Filter" data-togg+le="dropdown" tabindex="-1" aria-expanded="false">
|
||||
<span class="filters-label">All</span>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu pull-left filter-menu">
|
||||
<li>
|
||||
<a class="preset" tabindex="-1" href="javascript:" data-name="" data-action="selectPreset">
|
||||
<span class="glyphicon glyphicon-ok pull-right"></span>
|
||||
<div>All</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="preset" tabindex="-1" href="javascript:" data-name="portalUsers" data-action="selectPreset">
|
||||
<div>Portal Users</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="divider preset-control hidden"></li>
|
||||
<li class="preset-control remove-preset hidden"><a tabindex="-1" href="#" data-action="removePreset">Remove Filter</a></li>
|
||||
<li class="preset-control save-preset hidden"><a tabindex="-1" href="#" data-action="savePreset">Save Filter</a></li>
|
||||
<li class="divider"></li>
|
||||
<li class="checkbox"><label><input type="checkbox" data-role="boolFilterCheckbox" name="onlyMy">
|
||||
Only My</label>
|
||||
</li>
|
||||
<li class="checkbox"><label><input type="checkbox" data-role="boolFilterCheckbox" name="followed"> Followed</label></li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="text" class="form-control text-filter" name="textFilter" value="" tabindex="1">
|
||||
<div class="input-group-btn">
|
||||
<button type="button" class="btn btn-primary search btn-icon" data-action="search">
|
||||
<span class="glyphicon glyphicon-search"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group col-md-4 col-sm-4">
|
||||
<div class="btn-group">
|
||||
<a href="{% url 'contacts:list' %}"><button type="button" class="btn btn-default extra_option_btn" data-action="reset"></a>
|
||||
<span class="glyphicon glyphicon-repeat"></span> Reset
|
||||
</button>
|
||||
<button type="button" class="btn btn-default dropdown-toggle extra_option_btn add-filter-button" data-toggle="dropdown" tabindex="-1">
|
||||
Add Field <span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu pull-right filter-list">
|
||||
<li data-name="account" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="account">Account</a></li>
|
||||
<li data-name="address" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="address">Address</a></li>
|
||||
<li data-name="assignedUser" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="assignedUser">Assigned User</a></li>
|
||||
<li data-name="createdAt" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="createdAt">Created At</a></li>
|
||||
<li data-name="emailAddress" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="emailAddress">Email</a></li>
|
||||
<li data-name="phoneNumber" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="phoneNumber">Phone</a></li>
|
||||
<li data-name="title" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="title">Title</a></li>
|
||||
<li data-name="teams" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="teams">Teams</a></li>
|
||||
<li data-name="targetLists" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="targetLists">Target Lists</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{% block content %}
|
||||
<!-- main_container starts here -->
|
||||
<div class="main_container">
|
||||
<!-- heading_create starts here -->
|
||||
<div class="row marl heading_create">
|
||||
<div class="heading col-md-12">
|
||||
<div class="col-md-6">
|
||||
<h4>Leads</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="create_new col-md-3 text-right">
|
||||
<a href="{% url 'leads:add_lead'%}"><i class="fa fa-plus"></i> Add New Lead</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- heading_create ends here -->
|
||||
<!-- filter_row starts here -->
|
||||
<form action="" method='POST'>{%csrf_token%}
|
||||
<div class="col-md-6">
|
||||
<div class="create_new text-right">
|
||||
<a href="{% url 'leads:add_lead'%}"><i class="fa fa-plus"></i> Add New Lead</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- heading_create ends here -->
|
||||
<!-- filter_row starts here -->
|
||||
<div class="filter_row row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
FILTERS
|
||||
</div>
|
||||
<div class="panel-content">
|
||||
<div class="filter_col col-md-3">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Name</label>
|
||||
<input type="text" class="form-control" name="name" {% if request.GET %} value="{{request.GET.name}}" {% endif %}>
|
||||
<form id="leads_filter" action="" method="POST">{%csrf_token%}
|
||||
<div class="panel-content text-center">
|
||||
<div class="filter_col col-md-4">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">First Name</label>
|
||||
<input type="text" class="form-control" placeholder="First Name" name="first_name" value="{{request.POST.first_name}}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-4">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Last Name</label>
|
||||
<input type="text" class="form-control" placeholder="Last Name" name="last_name" value="{{request.POST.last_name}}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-4">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Lead Status</label>
|
||||
<select class="form-control" id="id_status" name="status" >
|
||||
<option value="">--Status of Lead--</option>
|
||||
{% for each_status in status %}
|
||||
<option value="{{each_status.0}}" {% if request.POST.status %} {% ifequal each_status.0 request.POST.status %}selected{% endifequal %}{% endif %} >{{each_status.1}} </option>
|
||||
{% endfor%}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col text-center">
|
||||
<div class="form-group">
|
||||
<button class="btn btn-primary" type="submit">Search</button>
|
||||
<a href="{% url 'leads:list' %}" class="btn btn-default">Clear</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-3">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Accounts</label>
|
||||
<select class="form-control" id="id_account" name="account">
|
||||
<option value="" selected="selected">---------</option>
|
||||
{% for i in account %}
|
||||
<option value="{{i.id}}" {%ifequal i.id request.GET.account|add:"0" %}selected{%endifequal%}>{{ i.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-3">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Email</label>
|
||||
<input type="text" class="form-control" name="email" {% if request.GET %} value="{{request.GET.email}}" {% endif %} >
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-3">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Status</label>
|
||||
<select class="form-control" id="id_status" name="status" >
|
||||
<option value="">----------</option>
|
||||
{% for s in status %}
|
||||
<option value="{{s.0}}" {% if request.GET.status %} {% ifequal s.0 request.GET.status %} selected {% endifequal %}{% endif %} >{{s.1}} </option>
|
||||
{% endfor%}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-5"></div>
|
||||
<button class="btn btn-primary save" id="filters_search" type="submit">Search</button>
|
||||
<a href="{% url 'leads:list' %}"><button class="btn btn-default" type="button">Cancel</button></a>
|
||||
</div>
|
||||
</form>
|
||||
<br clear="all">
|
||||
</div>
|
||||
<br clear="all">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="table_container_row row marl">
|
||||
<div class="col-md-12">
|
||||
<!-- filter_row ends here -->
|
||||
<!-- leads list start-->
|
||||
<div class="table_container_row row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading-list text-center">
|
||||
LIST OF LEADS
|
||||
<span class="pull-right total_count">Total Leads {{count}}</span>
|
||||
</div>
|
||||
<div class="panel-content">
|
||||
<table id="leadslist" class="table table-bordered table-striped table-condensed">
|
||||
<div class="panel-heading-list text-center">
|
||||
LIST OF LEADS
|
||||
<span class="pull-right total_count">{% if show_pageitems %} {% show_pageitems %}{% else %}Total Leads {{ lead_obj|length }}{% endif %}</span>
|
||||
</div>
|
||||
<div class="panel-content">
|
||||
<table class="table table-bordered table-striped table-condensed">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="5%" style="text-align:center;">S.No</th>
|
||||
<th width="30%" style="text-align:center;">NAME</th>
|
||||
<th width="25%" style="text-align:center;">EMAIL</th>
|
||||
<th width="25%" style="text-align:center;">STATUS</th>
|
||||
<th width="15%" style="text-align:center;">ACTIONS</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th width="5%" style="text-align:center;">S.No</th>
|
||||
<th width="20%" style="text-align:center;">NAME</th>
|
||||
<th width="15%" style="text-align:center;">STATUS</th>
|
||||
<th width="20%" style="text-align:center;">ASSIGNED USER</th>
|
||||
<th width="15%" style="text-align:center;">CREATED ON</th>
|
||||
<th width="25%" style="text-align:center;">ACTIONS</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% paginate 10 crm_task as crm_task %}
|
||||
{% for m in crm_task %}
|
||||
<tr>
|
||||
<td scope="row" style="text-align:center;">{{ forloop.counter }}</td>
|
||||
<td style="text-align:center;"><a href="{% url 'leads:view_lead' m.id %}">{{ m.name }}</a></td>
|
||||
<td style="text-align:center;">{{ m.email }}</td>
|
||||
<td style="text-align:center;">{{ m.status }}</td>
|
||||
<td style="text-align:center;">
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Actions
|
||||
<span class="caret"></span></button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="{% url 'leads:view_lead' m.id %}">View</a></li>
|
||||
<li><a href="{% url 'leads:edit_lead' m.id %}">Edit</a></li>
|
||||
<li><a href="{% url 'leads:delete_lead' m.id %}">Delete</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
{% if per_page %}
|
||||
{% paginate per_page lead_obj %}
|
||||
{% else %}
|
||||
{% paginate 10 lead_obj %}
|
||||
{% endif %}
|
||||
{% for lead in lead_obj %}
|
||||
<tr class="text-center">
|
||||
<td scope="row">{{ forloop.counter }}</td>
|
||||
<td><a href="{% url 'leads:view_lead' lead.id %}">{{ lead.first_name }} {{ lead.last_name }}</a></td>
|
||||
<td>{{ lead.status }}</td>
|
||||
<td>
|
||||
{% with lead_users=lead.assigned_to.all %}
|
||||
{% if lead_users %}
|
||||
{% for user in lead_users %}
|
||||
<li class="text-left">{{ user.user.email }}</li>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
Not Assigned to Any
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
</td>
|
||||
<td>{{ lead.created_on }}</td>
|
||||
<td>
|
||||
<a href="{% url 'leads:view_lead' lead.id %}" class="btn btn-info">View</a>
|
||||
<a href="{% url 'leads:edit_lead' lead.id %}" class="btn btn-success">Edit</a>
|
||||
<a href="{% url 'leads:remove_lead' lead.id %}" class="btn btn-danger">Delete</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{%ifequal crm_task|length 0%}
|
||||
<h4>
|
||||
<center>No data Found</center>
|
||||
</h4>
|
||||
{% else %}
|
||||
<div class="pagination_row marl row text-center">
|
||||
<nav aria-label="Page navigation">
|
||||
<ul class="pagination">
|
||||
{% show_pages %}
|
||||
</ul>
|
||||
</nav>
|
||||
</table>
|
||||
{%ifequal lead_obj|length 0%}
|
||||
<h4 class="text-center">No Lead Records Found</h4>
|
||||
{%endifequal%}
|
||||
<div class="marl row text-center">
|
||||
{% show_pages %}
|
||||
</div>
|
||||
{%endifequal%}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- leads list end-->
|
||||
</div>
|
||||
<!-- main_container ends here -->
|
||||
{% endblock %}
|
||||
|
||||
{% block js_block %}
|
||||
<script type="text/javascript">
|
||||
$("a[rel='page']").click(function(e){
|
||||
e.preventDefault();
|
||||
$('#leads_filter').attr("action", $(this).attr("href"));
|
||||
$('#leads_filter').submit();
|
||||
});
|
||||
</script>
|
||||
{% endblock js_block %}
|
||||
|
|
|
|||
|
|
@ -1,268 +1,247 @@
|
|||
{% extends 'base.html' %}
|
||||
{% load staticfiles %}
|
||||
<!-- main_container starts here -->
|
||||
<div class="main_container">
|
||||
{% block breadcrumb1 %}
|
||||
<!-- breadcrumb starts here -->
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="/leads/list">LEADS</a></li>
|
||||
<li>VIEW</li>
|
||||
<li class="active">{{ss.name}}</li>
|
||||
</ol>
|
||||
<!-- breadcrumb ends here -->
|
||||
{% endblock breadcrumb1 %}
|
||||
{% block content %}
|
||||
<!-- ACCOUNTS VIEW STARTS -->
|
||||
<div class="main_container" id="maincontainer">
|
||||
<div class="overview_form_block row marl">
|
||||
<div class="col-md-8">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading view-pad">
|
||||
<h5>OVERVIEW
|
||||
<span class="pull-right" style="margin-top: -10px">
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Actions
|
||||
<span class="caret"></span></button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="{% url 'leads:edit_lead' ss.id %}" >Edit</a></li>
|
||||
<li class="delete_account" ><a href="{% url 'leads:delete_lead' ss.id %}" id="remove_account">REMOVE</a></li>
|
||||
<li><a href="{% url 'leads:leads_convert' ss.id %}">Convert</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</span>
|
||||
</h5>
|
||||
</div>
|
||||
<div class="panel-content" id="datashow">
|
||||
<div class="row marl">
|
||||
<div class="col-md-6">
|
||||
<div class="filter_col col-md-12" id="iname">
|
||||
<div class="form-group" >
|
||||
<label class="acc_field_label" for="id_name" data-name="name" >Name</label>
|
||||
<div class="account_field" id="name" data-name="name">
|
||||
{%if not ss.name %}
|
||||
Not Specified
|
||||
{% else %}
|
||||
{{ss.name}}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="acc_field_label" for="id_name" data-name="name" >Account</label>
|
||||
<div class="account_field" id="account" data-name="name">
|
||||
{%if not ss.account.name %}
|
||||
Not Specified
|
||||
{% else %}
|
||||
{{ss.account.name}}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="acc_field_label" for="id_name" data-name="name" >Title</label>
|
||||
<div class="account_field" id="title" data-name="name">
|
||||
{%if not ss.title %}
|
||||
Not Specified
|
||||
{% else %}
|
||||
{{ss.title}}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="acc_field_label" for="id_name" data-name="name" >Phone</label>
|
||||
<div class="account_field" id="phone" data-name="name">
|
||||
{%if not ss.phone %}
|
||||
Not Specified
|
||||
{% else %}
|
||||
{{ss.phone}}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="acc_field_label" for="id_name" data-name="name" >Email</label>
|
||||
<div class="account_field" id="email" data-name="name">
|
||||
{%if not ss.email %}
|
||||
Not Specified
|
||||
{% else %}
|
||||
{{ss.email}}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="acc_field_label" for="id_name" data-name="name" >Status</label>
|
||||
<div class="account_field" id="status" data-name="name">
|
||||
{%if not ss.status %}
|
||||
Not Specified
|
||||
{% else %}
|
||||
{{ss.status}}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="acc_field_label" for="id_name" data-name="name" >Source</label>
|
||||
<div class="account_field" id="source" data-name="name">
|
||||
{%if not ss.source %}
|
||||
Not Specified
|
||||
{% else %}
|
||||
{{ss.source}}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="acc_field_label" for="id_name" data-name="name" >Website</label>
|
||||
<div class="account_field" id="website" data-name="name">
|
||||
{%if not ss.website %}
|
||||
Not Specified
|
||||
{% else %}
|
||||
{{ss.website}}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="acc_field_label" for="id_name" data-name="name" >Billing Address</label>
|
||||
<div class="account_field" id="address" data-name="name">{% if not ss.address %}Not Specified {% else %} {{ss.address.street}}, {{ss.address.city}}, {{ss.address.state}}, {{ss.address.postcode}}, {{ss.address.country.printable_name}}.{% endif %}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="acc_field_label" for="id_name" data-name="name">Description</label>
|
||||
<div class="account_field" id="description" data-name="name">
|
||||
{%if not ss.description %}
|
||||
Not Specified
|
||||
{% else %}
|
||||
{{ss.description}}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-heading view-pad">
|
||||
<h5>COMMENTS</h5>
|
||||
</div>
|
||||
<div class="panel-content" id="datashow">
|
||||
<div class="row marl">
|
||||
<div class="col-md-12">
|
||||
<form id="comment_form" method="POST" >{% csrf_token %}
|
||||
<div class="form-group">
|
||||
<textarea class="form-control" textarea cols="40" id="id_comments" name="comment" rows="1" onkeypress="HideError(event)" placeholder="Submit Your Comments"></textarea><span><i id="CommentError" style="display:none; color:red"></i></span>
|
||||
</br>
|
||||
<button class="btn btn-default save" id="comment_submit" type="submit">Submit</button>
|
||||
</div>
|
||||
<input type="hidden" value="{{ss.id}}" name="leadid">
|
||||
</form>
|
||||
<ul class="list-group" id="comments_div">
|
||||
{% for comment in comments %}
|
||||
<li class="list-group-item list-row" id="comment{{comment.id}}">
|
||||
<div class="pull-right right-container">
|
||||
<div class="list-row-buttons btn-group pull-right">
|
||||
<button class="btn btn-link btn-sm dropdown-toggle" data-toggle="dropdown" type="button"><span class="caret"></span></button>
|
||||
<ul class="dropdown-menu pull-right">
|
||||
<li>
|
||||
<a class="action" onclick="edit_comment({{comment.id}})" >Edit</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="action" onclick="remove_comment({{comment.id}})" >Remove</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="stream-head-container">{{comment.comment_user}} Commented</div>
|
||||
<div class="stream-post-container" id="comment_name{{comment.id}}">{{comment.comment}}</div>
|
||||
<div class="stream-date-container">{{comment.comment_time}}</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% block breadcrumb %}
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="{% url 'leads:list' %}">Leads</a></li>
|
||||
<li class="active">View</li>
|
||||
</ol>
|
||||
{%endblock%}
|
||||
{% block content %}
|
||||
<div class="main_container" id="maincontainer">
|
||||
<div class="overview_form_block row marl">
|
||||
<div class="col-md-8">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading view-pad">
|
||||
<h5>
|
||||
OVERVIEW
|
||||
<span class="pull-right" style="margin-top: -10px">
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Actions
|
||||
<span class="caret"></span></button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="{% url 'leads:edit_lead' lead_record.id %}" >Edit</a></li>
|
||||
<li class="delete_contact" ><a href="{% url 'leads:remove_lead' lead_record.id %}" id="remove_contact">REMOVE</a></li>
|
||||
<li><a href="{% url 'leads:leads_convert' lead_record.id %}" class="btn btn-info" role="button">Convert</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Comments Section Ends-->
|
||||
<!-- COmment Edit Modal Starts Here -->
|
||||
<div class="modal fade" id="myModal" role="dialog">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title">Update Your Comment</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<form id="comment_edit_form" method="POST" >{% csrf_token %}
|
||||
<textarea class="form-control" textarea cols="40" id="id_editcomment" name="comment" rows="1" placeholder="Submit Your Comments"></textarea>
|
||||
<input type="hidden" value="{{ss.id}}" name="leadid">
|
||||
<input type="hidden" value="" name="commentid" id="commentid">
|
||||
<button class="btn btn-default save" id="comment_edit" type="submit">Update</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</span>
|
||||
</h5>
|
||||
</div>
|
||||
<div class="panel-content" id="datashow">
|
||||
<div class="row marl">
|
||||
<div class="col-md-6">
|
||||
<div class="filter_col col-md-12" id="iname">
|
||||
<div class="form-group" >
|
||||
<label class="lead_field_label" for="id_name" data-name="name">Name</label>
|
||||
<div class="lead_field" id="lead_name" data-name="name">{{ lead_record.first_name }} {{ lead_record.last_name }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
{% if lead_record.account_name %}
|
||||
<div class="form-group">
|
||||
<label class="lead_field_label" for="id_contact_account" data-name="name">Account Name</label>
|
||||
<div class="lead_field" id ="contact_account" data-name="name">{{ lead_record.account_name }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
{% if lead_record.title %}
|
||||
<div class="form-group">
|
||||
<label class="lead_field_label" for="id_title" data-name="name">Title</label>
|
||||
<div class="lead_field" id="lead_title" data-name="name">{{ lead_record.title }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="lead_field_label" for="id_phone" data-name="name">Phone</label>
|
||||
<div class="lead_field" id="lead_phone" data-name="name">{{ lead_record.phone }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="lead_field_label" for="id_email" data-name="name">Email</label>
|
||||
<div class="lead_field" id="lead_email" data-name="name">{{ lead_record.email }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="filter_col col-md-12">
|
||||
{% if lead_record.status %}
|
||||
<div class="form-group">
|
||||
<label class="lead_field_label" for="id_status" data-name="name">Status</label>
|
||||
<div class="lead_field" id="lead_status" data-name="name">{{ lead_record.status }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
{% if lead_record.source %}
|
||||
<div class="form-group">
|
||||
<label class="lead_field_label" for="id_source" data-name="name">Source</label>
|
||||
<div class="lead_field" id="lead_source" data-name="name">{{ lead_record.source }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
{% if lead_record.website %}
|
||||
<div class="form-group">
|
||||
<label class="lead_field_label" for="id_website" data-name="name">Website</label>
|
||||
<div class="lead_field" id="lead_website" data-name="name">{{ lead_record.website }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
{% if lead_record.address.address_line or lead_record.address.street or lead_record.address.city or lead_record.address.state or lead_record.address.postcode or lead_record.address.country %}
|
||||
<label class="lead_field_label" for="id_address" data-name="name" >Billing Address</label>
|
||||
<div class="lead_field" id="lead_address" data-name="name">
|
||||
{% if lead_record.address.address_line %}
|
||||
Address Line:{{lead_record.address.address_line}}</br>
|
||||
{% endif %}
|
||||
{% if lead_record.address.street %}
|
||||
Street:{{ lead_record.address.street }}</br>
|
||||
{% endif %}
|
||||
{% if lead_record.address.city %}
|
||||
City: {{ lead_record.address.city }}</br>
|
||||
{% endif %}
|
||||
{% if lead_record.address.state %}
|
||||
State:{{ lead_record.address.state }}</br>
|
||||
{% endif %}
|
||||
{% if lead_record.address.postcode %}
|
||||
Post Code:{{ lead_record.address.postcode }}</br>
|
||||
{% endif %}
|
||||
{% if lead_record.address.country %}
|
||||
Country: {{ lead_record.address.get_country_display }}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
{% if lead_record.description %}
|
||||
<div class="form-group">
|
||||
<label class="lead_field_label" for="id_description" data-name="name" >Description</label>
|
||||
<div class="lead_field" id="lead_description" data-name="name">{{ lead_record.description }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading text-center">
|
||||
<h6>Users&Teams</h6>
|
||||
<!-- Comments Section starts-->
|
||||
<div class="panel-heading view-pad">
|
||||
<h5>COMMENTS</h5>
|
||||
</div>
|
||||
<div class="panel-content" id="datashow">
|
||||
<div class="row marl">
|
||||
<div class="col-md-12">
|
||||
<form id="comment_form" method="POST" enctype="multipart/form-data">{% csrf_token %}
|
||||
<div class="form-group">
|
||||
<textarea class="form-control" textarea cols="40" rows="3" id="id_comments" name="comment" placeholder="Submit Your Comments Here"></textarea><span><i id="CommentError" style="display:none; color:red"></i></span>
|
||||
</br>
|
||||
<button class="btn btn-default save" style="text-align: center;" id="comment_submit" type="submit">Submit</button>
|
||||
</div>
|
||||
<input type="hidden" value="{{lead_record.id}}" name="leadid">
|
||||
</form>
|
||||
<ul class="list-group" id="comments_div">
|
||||
{% for comment in comments %}
|
||||
<li class="list-group-item list-row" id="comment{{comment.id}}">
|
||||
<div class="pull-right right-container">
|
||||
<div class="list-row-buttons btn-group pull-right">
|
||||
<button class="btn btn-link btn-sm dropdown-toggle" data-toggle="dropdown" type="button"><span class="caret"></span></button>
|
||||
<ul class="dropdown-menu pull-right">
|
||||
<li>
|
||||
<a class="action" onclick="edit_comment({{comment.id}})">Edit</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="action" onclick="remove_comment({{comment.id}})">Remove</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="stream-head-container">{{ comment.commented_by }} Commented</div>
|
||||
<div class="stream-post-container" id="comment_name{{comment.id}}"><pre>{{ comment.comment }}</pre></div>
|
||||
<div class="stream-date-container">{{ comment.commented_on }}</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-content" id="datashow">
|
||||
<div class="row marl">
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="id_name" data-name="name" >Assigned User</label>
|
||||
<div class="field" id="assigned_user" data-name="name">
|
||||
{%if not ss.assigned_user %}
|
||||
Not Specified
|
||||
{% else %}
|
||||
{{ss.assigned_user}}
|
||||
{% endif %}
|
||||
<div class="modal fade" id="Comments_Leads_Modal" role="dialog" data-keyboard="false" data-backdrop="static">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title">Update Your Comment</h4>
|
||||
</div>
|
||||
<form id="comment_edit_form" method="POST" >{% csrf_token %}
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<textarea class="form-control" textarea cols="40" rows="3" id="id_editcomment" name="comment" placeholder="Submit Your Comments"></textarea>
|
||||
<input type="hidden" value="{{ lead.id }}" name="leadid">
|
||||
<input type="hidden" value="" name="commentid" id="commentid">
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-default save" id="comment_edit" type="submit">Update</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Comments Section Ends-->
|
||||
</div>
|
||||
</div>
|
||||
<tr id="meeting{{ meeting.id }}">
|
||||
<div class="col-md-4">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading view-pad">
|
||||
<h5>Label</h5>
|
||||
</div>
|
||||
<div class="panel-content" id="datashow">
|
||||
<div class="row marl">
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="lead_field_label" for="id_assigned_user" data-name="name" >Assigned User(s)</label>
|
||||
<div class="lead_field" id="lead_assigned_users" data-name="name">
|
||||
{%if not lead_record.assigned_to %}
|
||||
Not Assigned Yet
|
||||
{% else %}
|
||||
{% for user in lead_record.assigned_to.all %}
|
||||
<li>{{ user }}</li>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="id_name" data-name="name" >Assigned Teams</label>
|
||||
<div class="field" id="teams" data-name="name">
|
||||
{%if not ss.teams %}
|
||||
Not Specified
|
||||
{% else %}
|
||||
{{ss.teams}}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="lead_field_label" for="id_team" data-name="name" >Assigned Team(s)</label>
|
||||
<div class="lead_field" id="lead_team" data-name="name">
|
||||
{%if not lead_record.teams %}
|
||||
Not Assigned Yet
|
||||
{% else %}
|
||||
{% for team in lead_record.teams.all %}
|
||||
<li>{{ team }}</li>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="id_name" data-name="name" >Created At</label>
|
||||
<div class="field" id="teams" data-name="name">
|
||||
{%if not ss.created_date %}
|
||||
Not Specified
|
||||
{% else %}
|
||||
{{ss.created_date}}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="lead_field_label" for="id_created_on" data-name="name">Created On</label>
|
||||
<div class="lead_field" id="lead_created_on" data-name="name">
|
||||
{{lead_record.created_on}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="lead_field_label" for="id_created_by" data-name="name">Created by</label>
|
||||
<div class="lead_field" id="lead_created_by" data-name="name">
|
||||
{{lead_record.created_by}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -271,9 +250,10 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
{% block js_block %}
|
||||
<script src="{% static 'js/leadcomments/lead_comments.js' %}"></script>
|
||||
{% endblock %}
|
||||
<script src="{% static 'js/view_lead.js' %}"></script>
|
||||
<script src="{% static 'js/calls.js' %}"></script>
|
||||
<script src="{% static 'js/meetings.js' %}"></script>
|
||||
{% endblock js_block %}
|
||||
|
|
|
|||
|
|
@ -15,11 +15,11 @@
|
|||
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="{% url 'accounts:list' %}">Accounts</a></li>
|
||||
<li><a href="{% url 'contacts:list' %}">contacts</a></li>
|
||||
<li><a href="{% url 'leads:list' %}">Leads</a></li>
|
||||
<li><a href="{% url 'oppurtunities:list' %}">Opportunities</a></li>
|
||||
<li><a href="{% url 'cases:list' %}">Cases</a></li>
|
||||
<li><a href="{% url 'accounts:list' %}">ACCOUNTS</a></li>
|
||||
<li><a href="{% url 'contacts:list' %}">CONTACTS</a></li>
|
||||
<li><a href="{% url 'leads:list' %}">LEADS</a></li>
|
||||
<li><a href="{% url 'oppurtunities:list' %}">OPPORTUNITY</a></li>
|
||||
<li><a href="{% url 'cases:list' %}">CASES</a></li>
|
||||
</ul>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li class="dropdown">
|
||||
|
|
|
|||
|
|
@ -1,15 +1,13 @@
|
|||
{% extends 'base.html'%}
|
||||
{% load staticfiles%}
|
||||
{% extends 'base.html' %}
|
||||
{% load staticfiles %}
|
||||
{% block breadcrumb %}
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="{% url 'oppurtunities:list' %}">Opportunities</a></li>
|
||||
<li class="active">Create</li>
|
||||
</ol>
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="{% url 'oppurtunities:list' %}">Opportunities</a></li>
|
||||
<li class="active">Create</li>
|
||||
</ol>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<form class= "form_user" method="POST" action={% if opportunity_edit %}"{% url 'oppurtunities:opp_edit' opportunity_edit.id %}"{% else %}"{% url 'oppurtunities:save' %}" {% endif %}>
|
||||
{% csrf_token %}
|
||||
<div class="editdiv">
|
||||
<form class= "form_user" method="POST" action="" novalidate>{% csrf_token %}
|
||||
<div class="assigned_teams row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
|
|
@ -20,23 +18,13 @@
|
|||
<div class="filter_col col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Assigned Users</label>
|
||||
<select class="form-control" id="id_users" name="users" >
|
||||
<option value="">---------</option>
|
||||
{% for m in users %}
|
||||
<option value="{{ m.id }}" {% if opportunity_edit%} {%ifequal m.id opportunity_edit.users_id %}selected {% endifequal %} {% endif %}{%ifequal m.id request.POST.users|add:"0"%}selected{%endifequal%}>{{ m.username }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
{{ opportunity_form.assigned_to }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="id_teams">Teams</label>
|
||||
<select class="form-control" id="id_teams" name="teams">
|
||||
<option value="" selected="selected">---------</option>
|
||||
{% for k in teams %}
|
||||
<option value="{{ k.0 }}" {%ifequal k.0 opportunity_edit.teams %}selected {% endifequal %} {%ifequal k.0 request.POST.teams%}selected{%endifequal%}>{{ k.1 }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
{{ opportunity_form.teams }}
|
||||
</div>
|
||||
</div>
|
||||
<br clear="all">
|
||||
|
|
@ -56,131 +44,112 @@
|
|||
<div class="col-md-6">
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Name *</label>
|
||||
<input type="text" class="form-control" id="id_name" name="name" {% if error.name %} value="" {% endif %} value={%if opportunity_edit%}"{{opportunity_edit.name}}" {% else %}"{{request.POST.name}}"{% endif %}/>
|
||||
<label for="exampleInputEmail1" class="required">Name</label>
|
||||
{{ opportunity_form.name }}
|
||||
<span>{{opportunity_form.name.errors}}</span>
|
||||
</div>
|
||||
</div>
|
||||
{% if error.name %}
|
||||
{{error.name}}
|
||||
{% endif %}
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Account</label>
|
||||
<select class="form-control" id="id_account" name="account">
|
||||
<option value="">---------</option>
|
||||
{% for acc in accunt %}
|
||||
<option value="{{acc.id}}" {%ifequal acc.id opportunity_edit.account_id %}selected {% endifequal %} {%ifequal acc.id request.POST.account|add:"0"%}selected{%endifequal%}>{{ acc.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
{{ opportunity_form.account }}
|
||||
<span>{{opportunity_form.account.errors}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Amount *</label>
|
||||
<label for="exampleInputEmail1">Amount</label>
|
||||
<div class="input-group" style="width:100%;">
|
||||
<div class="input-group-btn left-dropdown" style="width:auto;">
|
||||
<select class="form-control">
|
||||
<option>USD</option>
|
||||
<option>EUR</option>
|
||||
</select>
|
||||
{{ opportunity_form.currency }}
|
||||
<span>{{opportunity_form.currency.errors}}</span>
|
||||
</div>
|
||||
<input type="number" class="form-control text-filter" tabindex="1" id="id_amount" name="amount" {%if error.amount %} value="" {% endif %}value={%if opportunity_edit%}"{{opportunity_edit.amount}}" {% else %}"{{request.POST.amount}}"{% endif %}/>
|
||||
{{ opportunity_form.amount }}
|
||||
<span>{{opportunity_form.amount.errors}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% if error.amount %}
|
||||
{{error.amount}}
|
||||
{% endif %}
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Stage *</label>
|
||||
<select class="form-control" id="id_stage" name="stage" >
|
||||
<option value="" selected="selected">---------</option>
|
||||
{% for stage in stages %}
|
||||
<option value="{{stage.0}}" {% if opportunity_edit%}{% ifequal stage.0 opportunity_edit.stage %}selected{% endifequal %}{% endif %} {% if request.POST.stage %} {% ifequal stage.0 request.POST.stage %}selected{% endifequal %}{% endif %} >{{stage.1}} </option>
|
||||
{% endfor%}
|
||||
</select>
|
||||
<label for="exampleInputEmail1" class="required">Stage</label>
|
||||
{{ opportunity_form.stage }}
|
||||
<span>{{opportunity_form.stage.errors}}</span>
|
||||
</div>
|
||||
</div>
|
||||
{% if error.stage %}
|
||||
{{error.stage}}
|
||||
{% endif %}
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Lead Source</label>
|
||||
<select class="form-control" id="id_lead_source" name="lead_source" >
|
||||
<option value="" selected="selected">---------</option>
|
||||
{% for source in sources %}
|
||||
<option value="{{source.0}}" {% if opportunity_edit%}{% ifequal source.0 opportunity_edit.lead_source %}selected{% endifequal %}{% endif %} {% if request.POST.lead_source %} {% ifequal source.0 request.POST.lead_source %}selected{% endifequal %}{% endif %} >{{source.1}} </option>
|
||||
{% endfor%}
|
||||
</select>
|
||||
{{ opportunity_form.lead_source }}
|
||||
<span>{{opportunity_form.lead_source.errors}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Probability %</label>
|
||||
{{ opportunity_form.probability }}
|
||||
<span>{{opportunity_form.probability.errors}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Probability(%) *</label>
|
||||
<input type="number" class="form-control " id="id_probability" name="probability" value={%if opportunity_edit%}"{{opportunity_edit.probability}}" {% else %}"{{request.POST.probability}}"{% endif %}/>
|
||||
</div>
|
||||
</div>
|
||||
{% if error.close_date %}
|
||||
{{error.close_date}}
|
||||
{% endif %}
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Contacts</label>
|
||||
<select class="form-control" id="id_contacts" name="contacts" multiple name="contacts">
|
||||
{% for cn in con %}
|
||||
<option value="{{cn.id}}" {% if selcon %}{% for sel in selcon %}{% ifequal cn.id sel.id %} selected {% endifequal%}{% endfor %}{%endif%}>{{cn.name}}</option>
|
||||
{% endfor %}
|
||||
{% if request.POST.account %}
|
||||
|
||||
{% endif %}
|
||||
</select>
|
||||
{{ opportunity_form.contacts }}
|
||||
<span>{{opportunity_form.contacts.errors}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Close Date *</label>
|
||||
<label for="exampleInputEmail1">Close Date</label>
|
||||
<div class='input-group date' id='datepicker1'>
|
||||
<input type='text' class="form-control" id="id_close_date" name="close_date" value={%if opportunity_edit%}"{{opportunity_edit.close_date|date:"Y-m-d"}}" {% else %}"{{request.POST.close_date}}"{% endif %}/>
|
||||
{{ opportunity_form.closed_on }}
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar"></span>
|
||||
</span>
|
||||
</div>
|
||||
<span>{{opportunity_form.closed_on.errors}}</span>
|
||||
</div>
|
||||
</div>
|
||||
{% if error.close_date %}
|
||||
{{error.close_date}}
|
||||
{% endif %}
|
||||
<div class="form-group col-md-12">
|
||||
<label for="exampleInputEmail1" >Description</label>
|
||||
<textarea class="form-control" rows="5" id="id_description" name="description"> {%if opportunity_edit%}{{opportunity_edit.description}} {% else %}{{request.POST.description}}{% endif %}</textarea>
|
||||
{{ opportunity_form.description }}
|
||||
<span>{{opportunity_form.description.errors}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br clear="all">
|
||||
<input type="hidden" id="save_new_form" name="savenewform">
|
||||
</div>
|
||||
<!-- overview ends here -->
|
||||
<div class="row marl buttons_row text-center">
|
||||
<button class=" btn btn-default save" type="submit" id = "saveform">Save</button>
|
||||
<a href="{% url 'oppurtunities:list' %}"><button type="button">Cancel</button></a>
|
||||
<button class=" btn btn-default save" type="submit" id="saveform">Save</button>
|
||||
{% if not opportunity_obj %}
|
||||
<button class="btn btn-success save savenew" type="submit">Save & New</button>
|
||||
{% endif %}
|
||||
<a href="{% url 'oppurtunities:list' %}" class="btn btn-default">Cancel</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- main_container ends here -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</form>
|
||||
{% endblock %}
|
||||
{% block js_block %}
|
||||
<script src="{% static 'js/opportunities/contacts.js' %}"></script>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#datepicker1').datetimepicker({
|
||||
'format': 'YYYY-MM-DD',
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{% endblock js_block %}
|
||||
<script src="{% static 'js/opportunities/contacts.js' %}"></script>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
var date = new Date();
|
||||
var today = new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
||||
$('#datepicker1').datetimepicker({
|
||||
'format': 'YYYY-MM-DD',
|
||||
minDate:today
|
||||
}).attr('readonly', 'true')
|
||||
});
|
||||
|
||||
$(".savenew").on('click', function(e){
|
||||
e.preventDefault()
|
||||
$("#save_new_form").val('true')
|
||||
$('.form_user').submit()
|
||||
});
|
||||
</script>
|
||||
{% endblock js_block %}
|
||||
|
|
|
|||
|
|
@ -1,79 +1,35 @@
|
|||
{% extends "base.html" %}
|
||||
{% load staticfiles %}
|
||||
{% load paginate %}
|
||||
|
||||
<!-- main_container starts here -->
|
||||
{% block content %}
|
||||
<div class="main_container" id="maincontainer">
|
||||
<div id="container">
|
||||
<!-- heading_create starts here -->
|
||||
<div class="row marl heading_create">
|
||||
<div class="heading col-md-2">Opportunities</div>
|
||||
<div class="col-md-7">
|
||||
<div class="row marl search-row">
|
||||
<div class="form-group col-md-8 col-sm-8">
|
||||
<div class="input-group">
|
||||
<div class="input-group-btn left-dropdown">
|
||||
<button type="button" class="btn dropdown-toggle filters-button btn-default" title="Filter" data-toggle="dropdown" tabindex="-1" aria-expanded="false"><span class="filters-label">All</span><span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu pull-left filter-menu">
|
||||
<li><a class="preset" tabindex="-1" href="javascript:" data-name="" data-action="selectPreset"><span class="glyphicon glyphicon-ok pull-right"></span><div>All</div></a></li>
|
||||
<li><a class="preset" tabindex="-1" href="javascript:" data-name="portalUsers" data-action="selectPreset"><div>Portal Users</div></a></li>
|
||||
<li class="divider preset-control hidden"></li>
|
||||
<li class="preset-control remove-preset hidden"><a tabindex="-1" href="#" data-action="removePreset">Remove Filter</a></li>
|
||||
<li class="preset-control save-preset hidden"><a tabindex="-1" href="#" data-action="savePreset">Save Filter</a></li>
|
||||
<li class="divider"></li>
|
||||
<li class="checkbox"><label><input type="checkbox" data-role="boolFilterCheckbox" name="onlyMy"> Only My</label></li>
|
||||
<li class="checkbox"><label><input type="checkbox" data-role="boolFilterCheckbox" name="followed"> Followed</label></li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="text" class="form-control text-filter" name="textFilter" value="" tabindex="1">
|
||||
<div class="input-group-btn">
|
||||
<button type="button" class="btn btn-primary search btn-icon" data-action="search"><span class="glyphicon glyphicon-search"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group col-md-4 col-sm-4">
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default extra_option_btn" data-action="reset"><span class="glyphicon glyphicon-repeat"></span> Reset
|
||||
</button>
|
||||
<button type="button" class="btn btn-default dropdown-toggle extra_option_btn add-filter-button" data-toggle="dropdown" tabindex="-1">Add Field <span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu pull-right filter-list">
|
||||
<li data-name="account" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="account">Account</a></li>
|
||||
<li data-name="address" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="address">Address</a></li>
|
||||
<li data-name="assignedUser" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="assignedUser">Assigned User</a></li>
|
||||
<li data-name="createdAt" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="createdAt">Created At</a></li>
|
||||
<li data-name="emailAddress" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="emailAddress">Email</a></li>
|
||||
<li data-name="phoneNumber" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="phoneNumber">Phone</a></li>
|
||||
<li data-name="title" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="title">Title</a></li>
|
||||
<li data-name="teams" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="teams">Teams</a></li>
|
||||
<li data-name="targetLists" class=""><a href="#" class="add-filter" data-action="addFilter" data-name="targetLists">Target Lists</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="create_new col-md-3 text-right">
|
||||
<a href="{% url 'oppurtunities:save' %}"><i class="fa fa-plus"></i> Add New Opportunity</a>
|
||||
</div>
|
||||
<!-- main_container starts here -->
|
||||
<div class="main_container">
|
||||
<!-- heading_create starts here -->
|
||||
<div class="row marl heading_create">
|
||||
<div class="heading col-md-12">
|
||||
<div class="col-md-6">
|
||||
<h4>Opportunities</h4>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="create_new text-right">
|
||||
<a href="{% url 'oppurtunities:save' %}"><i class="fa fa-plus"></i> Add New Opportunity</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- heading_create ends here -->
|
||||
<!-- filter_row starts here -->
|
||||
<div class="filter_row row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
FILTERS
|
||||
</div>
|
||||
<form class = "opportunity_filter" method="GET" action="">{% csrf_token %}
|
||||
<div class="panel-content">
|
||||
</div>
|
||||
</div>
|
||||
<!-- heading_create ends here -->
|
||||
<!-- filter_row starts here -->
|
||||
<div class="filter_row row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
</div>
|
||||
<form id="opportunity_filter" method="POST" action="">{% csrf_token %}
|
||||
<div class="panel-content text-center">
|
||||
<div class="filter_col col-md-3">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Name</label>
|
||||
<input type="text" class="form-control" placeholder="Name" id="id_name" name="name" {% if request.GET %} value="{{request.GET.name}}" {% endif %}>
|
||||
<input type="text" class="form-control" placeholder="Name" id="id_name" name="name" {% if request.POST %} value="{{request.POST.name}}" {% endif %}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-3">
|
||||
|
|
@ -82,124 +38,135 @@
|
|||
<select class="form-control" id="id_account" name="account">
|
||||
<option value="">---------</option>
|
||||
{% for l in accounts %}
|
||||
<option value="{{l.id}}" {% if request.GET.account %}{%ifequal l.id request.GET.account|add:"0"%}selected{%endifequal%} {% endif %}>{{ l.name }}</option>
|
||||
<option value="{{l.id}}" {% if request.POST.account %}{%ifequal l.id request.POST.account|add:"0"%}selected{%endifequal%} {% endif %}>{{ l.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-2">
|
||||
<div class="filter_col col-md-3">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Stage</label>
|
||||
<select class="form-control" id="id_stage" name="stage" >
|
||||
<option value="">---------</option>
|
||||
{% for stage in stages %}
|
||||
<option value="{{stage.0}}" {% if request.GET.stage %} {% ifequal stage.0 request.GET.stage %}selected{% endifequal %} {% endif %}>{{stage.1}} </option>
|
||||
<option value="{{stage.0}}" {% if request.POST.stage %} {% ifequal stage.0 request.POST.stage %}selected{% endifequal %} {% endif %}>{{stage.1}} </option>
|
||||
{% endfor%}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-2">
|
||||
<div class="filter_col col-md-3">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Lead Source</label>
|
||||
<select class="form-control" id="id_lead_source" name="lead_source" >
|
||||
<option value="">---------</option>
|
||||
{% for source in sources %}
|
||||
<option value="{{source.0}}" {% if request.GET.lead_source %} {% ifequal source.0 request.GET.lead_source %}selected{% endifequal %} {% endif %}>{{source.1}} </option>
|
||||
<option value="{{source.0}}" {% if request.POST.lead_source %} {% ifequal source.0 request.POST.lead_source %}selected{% endifequal %} {% endif %}>{{source.1}} </option>
|
||||
{% endfor%}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-2">
|
||||
<div class="filter_col text-center">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Contacts</label>
|
||||
<select class="form-control" id="id_contacts" name="contacts">
|
||||
<option value="">---------</option>
|
||||
{% for con in contacts %}
|
||||
<option value="{{con.id}}" {% if request.GET.contacts %}{%ifequal con.id request.GET.contacts|add:"0"%}selected{%endifequal%} {% endif %}>{{ con.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<button class="btn btn-primary" type="submit">Search</button>
|
||||
<a href="{% url 'oppurtunities:list' %}" class="btn btn-default">Clear</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter_col col-md-5"></div>
|
||||
<button class="btn btn-primary save" type="submit">Search</button>
|
||||
<a href="{% url 'oppurtunities:list' %}"><button class="btn btn-default" type="button">Cancel</button></a>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
<br clear="all">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<br clear="all">
|
||||
</div>
|
||||
<!-- filter_row ends here -->
|
||||
<div class="table_container_row row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading-list text-center">
|
||||
LIST OF OPPORTUNITIES
|
||||
<span class="pull-right total_count">Total Opportunities : {{count}}</span>
|
||||
</div>
|
||||
<div class="panel-content">
|
||||
<table class="table table-bordered table-striped table-condensed">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="5%" class="text-center">S.No</th>
|
||||
<th width="20%" class="text-center">Name</th>
|
||||
<th width="20%" class="text-center">Account</th>
|
||||
<th width="20%" class="text-center">Stage</th>
|
||||
<th width="25%" class="text-center">Close Date</th>
|
||||
<th width="10%" class="text-center">Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% paginate 5 opportunity as opportunity %}
|
||||
{% for m in opportunity %}
|
||||
<tr class="text-center">
|
||||
<td scope="row" style="text-align:center;">{{ forloop.counter }}</td>
|
||||
<td><a href="{% url 'oppurtunities:opp_view' m.id %}">{{ m.name }}</a></td>
|
||||
<td>{%ifequal m.account None%}Not Specified
|
||||
{% else %}<a
|
||||
href="{% url 'accounts:view_account' m.account.id %}">{{m.account}}{% endifequal %}</a></td>
|
||||
<td>{{ m.stage }}</td>
|
||||
<td>{{ m.close_date }}</td>
|
||||
<td>
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Actions
|
||||
<span class="caret"></span></button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="{% url 'oppurtunities:opp_view' m.id %}">View</a></li>
|
||||
<li><a href="{% url 'oppurtunities:opp_edit' m.id %}">Edit</a></li>
|
||||
<li><a href="{% url 'oppurtunities:opp_delete' m.id %}">Delete</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% ifequal opportunity|length 0 %}
|
||||
<h4>
|
||||
<center>No data Found</center>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<!-- filter_row ends here -->
|
||||
<!-- opportunities list start-->
|
||||
<div class="table_container_row row marl">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading-list text-center">
|
||||
LIST OF OPPORTUNITIES
|
||||
<span class="pull-right total_count">{% if show_pageitems %} {% show_pageitems %}{% else %}Total Opportunities {{ opportunity_list|length }}{% endif %}</span>
|
||||
</div>
|
||||
<div class="panel-content">
|
||||
<table class="table table-bordered table-striped table-condensed">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="5%" style="text-align:center;">S.No</th>
|
||||
<th width="15%" style="text-align:center;">Name</th>
|
||||
<th width="15%" style="text-align:center;">Account</th>
|
||||
<th width="15%" style="text-align:center;">Contact(s)</th>
|
||||
<th width="15%" style="text-align:center;">Stage</th>
|
||||
<th width="10%" style="text-align:center;">Lead Source</th>
|
||||
<th width="25%" style="text-align:center;">Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% if per_page %}
|
||||
{% paginate per_page opportunity_list %}
|
||||
{% else %}
|
||||
<div class="pagination_row marl row text-center">
|
||||
<nav aria-label="Page navigation">
|
||||
<ul class="pagination">
|
||||
{% show_pages %}
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
{% endifequal %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br clear="all">
|
||||
{% paginate 10 opportunity_list %}
|
||||
{% endif %}
|
||||
{% for opportunity in opportunity_list %}
|
||||
<tr class="text-center">
|
||||
<td scope="row">{{ forloop.counter }}</td>
|
||||
<td><a href="{% url 'oppurtunities:opp_view' opportunity.id %}">{{ opportunity.name }}</a></td>
|
||||
<td>
|
||||
{% if opportunity.account %}
|
||||
<a href="{% url 'accounts:view_account' opportunity.account.id %}">{{ opportunity.account }}</a>
|
||||
{% else %}
|
||||
No Related Account
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% with opp_contacts=opportunity.contacts.all %}
|
||||
{% if opp_contacts %}
|
||||
{% for contact in opp_contacts %}
|
||||
<li class="text-left"><a href="{% url 'contacts:view_contact' contact.id %}">{{contact.first_name}} {{contact.last_name}}</a></li>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
No Related Contact
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
</td>
|
||||
<td>{% if opportunity.stage %}{{ opportunity.stage }}{% else %}Not Specified {% endif %}</td>
|
||||
<td>{% if opportunity.lead_source %}{{ opportunity.lead_source }}{% else %}Not Specified{% endif %}</td>
|
||||
<td>
|
||||
<a href="{% url 'oppurtunities:opp_view' opportunity.id %}" class="btn btn-info ">View</a>
|
||||
<a href="{% url 'oppurtunities:opp_edit' opportunity.id %}" class="btn btn-success ">Edit</a>
|
||||
<a href="{% url 'oppurtunities:opp_remove' opportunity.id %}" class="btn btn-danger delete">Delete</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% ifequal opportunity_list|length 0 %}
|
||||
<h4 class="text-center">No Opportunity Records Found</h4>
|
||||
{% endifequal %}
|
||||
<div class="marl row text-center">
|
||||
{% show_pages %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br clear="all">
|
||||
</div>
|
||||
<!-- opportunities list end-->
|
||||
</div>
|
||||
<!-- main_container ends here -->
|
||||
{% endblock %}
|
||||
{% block js_block %}
|
||||
<script src="{% static 'js/opportunities/contacts.js' %}"></script>
|
||||
{% endblock %}
|
||||
<script type="text/javascript">
|
||||
$('.delete').click(function(e){
|
||||
e.preventDefault()
|
||||
url = $(this).attr('href')
|
||||
if (!confirm('Are you sure you want to delete?'))
|
||||
return;
|
||||
window.location = $(this).attr('href')
|
||||
});
|
||||
|
||||
$("a[rel='page']").click(function(e){
|
||||
e.preventDefault();
|
||||
$('#opportunity_filter').attr("action", $(this).attr("href"));
|
||||
$('#opportunity_filter').submit();
|
||||
});
|
||||
</script>
|
||||
{% endblock js_block %}
|
||||
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue