Enhancements (#10)

* accounts section code updated and functionality issues fixed

* updated all modules from app
This commit is contained in:
Ashwin Kumar 2017-10-10 13:24:39 +05:30 committed by GitHub
parent df214d9425
commit 07caee661b
31 changed files with 2370 additions and 4214 deletions

View file

@ -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')

View file

@ -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):

View file

@ -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):

View file

@ -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):

View file

@ -6,7 +6,7 @@ from django.contrib.auth import logout, authenticate, login
# @login_required
@login_required
def home(request):
return render(request, 'index.html')

View file

@ -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')

View file

@ -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')

View file

@ -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'),
]

View file

@ -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')

View file

@ -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')

View file

@ -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()

View file

@ -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'),
]

View file

@ -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')

View file

@ -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')

View file

@ -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')

View file

@ -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'),
]

View file

@ -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')

View file

@ -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):

View 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()
}
})
}
}

View 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()
}
})
}
}

View file

@ -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">
&nbsp;&nbsp;Only My</label></li>
<li class="checkbox"><label><input type="checkbox" data-role="boolFilterCheckbox" name="followed"> &nbsp;&nbsp;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>&nbsp;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 %}

View file

@ -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">
&nbsp;&nbsp;Only My</label></li>
<li class="checkbox"><label><input type="checkbox" data-role="boolFilterCheckbox" name="followed"> &nbsp;&nbsp;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>&nbsp;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 %}

View file

@ -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

View file

@ -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 %}

View file

@ -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">
&nbsp;&nbsp;Only My</label>
</li>
<li class="checkbox"><label><input type="checkbox" data-role="boolFilterCheckbox" name="followed"> &nbsp;&nbsp;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>&nbsp;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 %}

View file

@ -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">&times;</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">&times;</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 %}

View file

@ -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">

View file

@ -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 %}

View file

@ -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">&nbsp;&nbsp;Only My</label></li>
<li class="checkbox"><label><input type="checkbox" data-role="boolFilterCheckbox" name="followed"> &nbsp;&nbsp;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>&nbsp;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