diff --git a/accounts/templates/create_account.html b/accounts/templates/create_account.html index b32a0da4..eeb473cd 100644 --- a/accounts/templates/create_account.html +++ b/accounts/templates/create_account.html @@ -148,11 +148,13 @@ {% if account_obj.account_attachment.count %} - {% for i in account_obj.account_attachment.all %} - - {{ i.file_name }} - X - + {% for attachment in account_obj.account_attachment.all %} +
+ {{ attachment.file_name }} + {% if not attachment.created_by.role == 'ADMIN' or attachment.created_by.role == request.user.role %} + X + {% endif %} +
{% endfor %} {% endif %} @@ -284,4 +286,4 @@ } }); -{% endblock js_block %} +{% endblock js_block %} \ No newline at end of file diff --git a/accounts/views.py b/accounts/views.py index 483a8490..408b2337 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -57,7 +57,8 @@ class AccountsListView(LoginRequiredMixin, TemplateView): context['close_accounts'] = close_accounts context["industries"] = INDCHOICES context["per_page"] = self.request.POST.get('per_page') - context["tags"] = Tags.objects.all() + tag_ids = list(set(Account.objects.values_list('tags', flat=True))) + context["tags"] = Tags.objects.filter(id__in=tag_ids) search = False if ( diff --git a/cases/templates/create_cases.html b/cases/templates/create_cases.html index a66f574e..448f7c2d 100644 --- a/cases/templates/create_cases.html +++ b/cases/templates/create_cases.html @@ -26,28 +26,28 @@
{{ case_form.name }} - {{ case_form.name.errors }} + {{ case_form.name.errors }}
{{ case_form.status }} - {{ case_form.status.errors }} + {{ case_form.status.errors }}
{{ case_form.priority }} - {{ case_form.priority.errors }} + {{ case_form.priority.errors }}
{{ case_form.case_type }} - {{ case_form.case_type.errors }} + {{ case_form.case_type.errors }}
@@ -61,7 +61,7 @@ - {{ case_form.closed_on.errors }} + {{ case_form.closed_on.errors }}
@@ -72,7 +72,7 @@ {% endfor %} - {{ case_form.assigned_to.errors }} + {{ case_form.assigned_to.errors }}
@@ -85,22 +85,24 @@ {% else %} {{case_form.account}} {% endif %} - {{case_form.account.errors}} + {{case_form.account.errors}}
- + {% if case_obj.case_attachment.count %} - {% for i in case_obj.case_attachment.all %} - - {{i.file_name}} - X - + {% for attachment in case_obj.case_attachment.all %} +
+ {{ attachment.file_name }} + {% if not attachment.created_by.role == 'ADMIN' or attachment.created_by.role == request.user.role %} + X + {% endif %} +
{% endfor %} {% endif %} - +
@@ -109,14 +111,14 @@
{{ case_form.contacts }} - {{case_form.contacts.errors}} + {{case_form.contacts.errors}}
{{ case_form.description }} - {{ case_form.description.errors }} + {{ case_form.description.errors }}
@@ -127,7 +129,7 @@
- + {% if not case_obj %} {% endif %} @@ -141,10 +143,77 @@
+
+ +
+ 0% +
+
+
{% endblock %} {% block js_block %} + - -{% endblock js_block %} - +{% endblock js_block %} \ No newline at end of file diff --git a/common/templates/list.html b/common/templates/list.html index 18de8c48..3181e6dd 100644 --- a/common/templates/list.html +++ b/common/templates/list.html @@ -87,7 +87,7 @@ Edit {% endif %} - {% if user.email != admin_email or request.user != user %} + {% if user.email != admin_email and request.user != user %} {% endif %} diff --git a/common/templates/settings/create.html b/common/templates/settings/create.html index 58291aac..281583d8 100644 --- a/common/templates/settings/create.html +++ b/common/templates/settings/create.html @@ -91,14 +91,14 @@ e.preventDefault(); $form = $(this) $.post("", $form.serialize(), function(response){ - $(".error").remove(); + $(".error_message").remove(); if(response.error){ $.each(response.errors, function(field_name, error){ if (field_name == '__all__'){ - error = "" + error + "" + error = "" + error + "" $("span.__all__").after(error) }else{ - error = "" + error + "" + error = "" + error + "" $form.find("[name="+field_name + "]").after(error) } }) @@ -148,4 +148,3 @@ {% endblock js_block %} - diff --git a/common/templates/settings/list.html b/common/templates/settings/list.html index 33dff112..ce5307ae 100644 --- a/common/templates/settings/list.html +++ b/common/templates/settings/list.html @@ -85,5 +85,4 @@ window.location = $(this).attr('href') }); -{% endblock js_block %} - +{% endblock js_block %} \ No newline at end of file diff --git a/common/templates/settings/update.html b/common/templates/settings/update.html index ab1e6253..e0d9424c 100644 --- a/common/templates/settings/update.html +++ b/common/templates/settings/update.html @@ -91,14 +91,14 @@ e.preventDefault(); $form = $(this) $.post("", $form.serialize(), function(response){ - $(".error").remove(); + $(".error_message").remove(); if(response.error){ $.each(response.errors, function(field_name, error){ if (field_name == '__all__'){ - error = "" + error + "" + error = "" + error + "" $("span.__all__").after(error) }else{ - error = "" + error + "" + error = "" + error + "" $form.find("[name="+field_name + "]").after(error) } }) diff --git a/common/urls.py b/common/urls.py index 107344e9..17e3386b 100644 --- a/common/urls.py +++ b/common/urls.py @@ -4,7 +4,7 @@ from django.urls import path from common.views import ( HomeView, LoginView, ForgotPasswordView, LogoutView, ChangePasswordView, ProfileView, UsersListView, CreateUserView, UpdateUserView, UserDetailView, UserDeleteView, PasswordResetView, - DocumentListView, DocumentCreateView, UpdateDocumentView, DocumentDetailView, DocumentDeleteView, + DocumentListView, document_create, document_update, DocumentDetailView, DocumentDeleteView, download_document, change_user_status, download_attachment, add_comment, edit_comment, remove_comment, api_settings, add_api_settings, view_api_settings, update_api_settings, delete_api_settings, change_passsword_by_admin, google_login @@ -42,8 +42,8 @@ urlpatterns = [ # Document path('documents/list/', DocumentListView.as_view(), name='doc_list'), - path('documents/create/', DocumentCreateView.as_view(), name='create_doc'), - path('documents//edit/', UpdateDocumentView.as_view(), name="edit_doc"), + path('documents/create/', document_create, name='create_doc'), + path('documents//edit/', document_update, name="edit_doc"), path('documents//view/', DocumentDetailView.as_view(), name='view_doc'), path('documents//delete/', DocumentDeleteView.as_view(), name='remove_doc'), diff --git a/common/views.py b/common/views.py index 0b3cf7d1..6862f7bb 100644 --- a/common/views.py +++ b/common/views.py @@ -168,8 +168,9 @@ class LoginView(TemplateView): "ENABLE_GOOGLE_LOGIN": settings.ENABLE_GOOGLE_LOGIN, "GP_CLIENT_SECRET": settings.GP_CLIENT_SECRET, "GP_CLIENT_ID": settings.GP_CLIENT_ID, - "error": True, - "message": "Your username and password didn't match. Please try again." + # "error": True, + # "message": "Your username and password didn't match. Please try again." + "form": form }) @@ -332,48 +333,33 @@ class PasswordResetView(PasswordResetView): email_template_name = 'registration/password_reset_email.html' -class DocumentCreateView(LoginRequiredMixin, CreateView): - model = Document - form_class = DocumentForm +def document_create(request): template_name = "doc_create.html" - def dispatch(self, request, *args, **kwargs): - self.users = User.objects.filter(is_active=True).order_by('email') - return super(DocumentCreateView, self).dispatch(request, *args, **kwargs) - - def get_form_kwargs(self): - kwargs = super(DocumentCreateView, self).get_form_kwargs() - kwargs.update({'users': self.users}) - return kwargs - - def form_valid(self, form): - doc = form.save(commit=False) - doc.created_by = self.request.user - doc.save() - if self.request.POST.getlist('shared_to'): - doc.shared_to.add(*self.request.POST.getlist('shared_to')) - - if self.request.is_ajax(): + users = User.objects.filter(is_active=True).order_by('email') + form = DocumentForm(users=users) + if request.POST: + form = DocumentForm(request.POST, request.FILES, users=users) + if form.is_valid(): + doc = form.save(commit=False) + doc.created_by = request.user + doc.save() + if request.POST.getlist('shared_to'): + doc.shared_to.add(*request.POST.getlist('shared_to')) data = {'success_url': reverse_lazy( 'common:doc_list'), 'error': False} return JsonResponse(data) - return super(DocumentCreateView, self).form_valid(form) - def form_invalid(self, form): - response = super(DocumentCreateView, self).form_invalid(form) - if self.request.is_ajax(): + else: return JsonResponse({'error': True, 'errors': form.errors}) - return response - - def get_context_data(self, **kwargs): - context = super(DocumentCreateView, self).get_context_data(**kwargs) - context["doc_form"] = context["form"] - context["users"] = self.users + else: + context = {} + context["doc_form"] = form + context["users"] = users context["sharedto_list"] = [ - int(i) for i in self.request.POST.getlist('assigned_to', []) if i] - if "errors" in kwargs: - context["errors"] = kwargs["errors"] - return context + int(i) for i in request.POST.getlist('assigned_to', []) if i] + context["errors"] = form.errors + return render(request, template_name, context) class DocumentListView(LoginRequiredMixin, TemplateView): @@ -446,6 +432,42 @@ class DocumentDeleteView(LoginRequiredMixin, DeleteView): return redirect("common:doc_list") +def document_update(request, pk): + template_name = "doc_create.html" + users = User.objects.filter(is_active=True).order_by('email') + form = DocumentForm(users=users) + document = Document.objects.filter(id=pk).first() + + if request.POST: + form = DocumentForm(request.POST, request.FILES, instance=document, users=users) + if form.is_valid(): + doc = form.save(commit=False) + doc.save() + + doc.shared_to.clear() + if request.POST.getlist('shared_to'): + doc.shared_to.add(*request.POST.getlist('shared_to')) + + data = {'success_url': reverse_lazy( + 'common:doc_list'), 'error': False} + return JsonResponse(data) + + else: + return JsonResponse({'error': True, 'errors': form.errors}) + + else: + context = {} + context["doc_obj"] = document + context["doc_form"] = form + context["doc_file_name"] = context["doc_obj"].document_file.name.split( + "/")[-1] + context["users"] = users + context["sharedto_list"] = [ + int(i) for i in request.POST.getlist('shared_to', []) if i] + context["errors"] = form.errors + return render(request, template_name, context) + + class UpdateDocumentView(LoginRequiredMixin, UpdateView): model = Document form_class = DocumentForm @@ -524,7 +546,7 @@ def download_document(request, pk): if doc_obj: if not request.user.role == 'ADMIN': if (not request.user == doc_obj.created_by and - request.user not in doc_obj.shared_to.all()): + request.user not in doc_obj.shared_to.all()): raise PermissionDenied path = doc_obj.document_file.path file_path = os.path.join(settings.MEDIA_ROOT, path) @@ -698,7 +720,7 @@ def update_api_settings(request, pk): else: data = { 'form': form, "setting": api_settings, 'users': users, 'assign_to_list': assign_to_list, - 'assigned_to_list': json.dumps([i.id for i in api_settings.lead_assigned_to.all() if i]) + 'assigned_to_list': json.dumps([setting.id for setting in api_settings.lead_assigned_to.all() if setting]) } return render(request, 'settings/update.html', data) @@ -759,11 +781,16 @@ def google_login(request): link = user_document['link'] if 'link' in user_document.keys( ) else link - verified_email = user_document['verified_email'] if 'verified_email' in user_document.keys() else '' - name = user_document['name'] if 'name' in user_document.keys() else 'name' - first_name = user_document['given_name'] if 'given_name' in user_document.keys() else 'first_name' - last_name = user_document['family_name'] if 'family_name' in user_document.keys() else 'last_name' - email = user_document['email'] if 'email' in user_document.keys() else 'email@dummy.com' + verified_email = user_document['verified_email'] if 'verified_email' in user_document.keys( + ) else '' + name = user_document['name'] if 'name' in user_document.keys( + ) else 'name' + first_name = user_document['given_name'] if 'given_name' in user_document.keys( + ) else 'first_name' + last_name = user_document['family_name'] if 'family_name' in user_document.keys( + ) else 'last_name' + email = user_document['email'] if 'email' in user_document.keys( + ) else 'email@dummy.com' user = User.objects.filter(email=user_document['email']) @@ -777,7 +804,7 @@ def google_login(request): email=email, first_name=first_name, last_name=last_name, - role="User" + role="USER" ) google, created = Google.objects.get_or_create(user=user) diff --git a/contacts/templates/create_contact.html b/contacts/templates/create_contact.html index cbaf44f0..f48236b1 100644 --- a/contacts/templates/create_contact.html +++ b/contacts/templates/create_contact.html @@ -107,11 +107,13 @@ {% if contact_obj.contact_attachment.count %} - {% for i in contact_obj.contact_attachment.all %} - - {{i.file_name}} - X - + {% for attachment in contact_obj.contact_attachment.all %} +
+ {{ attachment.file_name }} + {% if not attachment.created_by.role == 'ADMIN' or attachment.created_by.role == request.user.role %} + X + {% endif %} +
{% endfor %} {% endif %} diff --git a/contacts/views.py b/contacts/views.py index 40d595bd..0444528e 100644 --- a/contacts/views.py +++ b/contacts/views.py @@ -176,7 +176,7 @@ class ContactDetailView(LoginRequiredMixin, DetailView): def get_context_data(self, **kwargs): context = super(ContactDetailView, self).get_context_data(**kwargs) - user_assgn_list = [i.id for i in context['object'].assigned_to.all()] + user_assgn_list = [assigned_to.id for assigned_to in context['object'].assigned_to.all()] if self.request.user == context['object'].created_by: user_assgn_list.append(self.request.user.id) if self.request.user.role != "ADMIN" and not self.request.user.is_superuser: @@ -285,7 +285,7 @@ class UpdateContactView(LoginRequiredMixin, UpdateView): context = super(UpdateContactView, self).get_context_data(**kwargs) context["contact_obj"] = self.object user_assgn_list = [ - i.id for i in context["contact_obj"].assigned_to.all()] + assigned_to.id for assigned_to in context["contact_obj"].assigned_to.all()] if self.request.user == context['contact_obj'].created_by: user_assgn_list.append(self.request.user.id) if self.request.user.role != "ADMIN" and not self.request.user.is_superuser: @@ -477,4 +477,3 @@ class DeleteAttachmentsView(LoginRequiredMixin, View): data = {'error': "You don't have permission to delete this attachment."} return JsonResponse(data) - diff --git a/leads/templates/create_lead.html b/leads/templates/create_lead.html index 3909c670..580da1f2 100644 --- a/leads/templates/create_lead.html +++ b/leads/templates/create_lead.html @@ -13,12 +13,9 @@ {% endblock %} {%block content%} - - - -
+
@@ -34,12 +31,12 @@
{{ lead_form.first_name }} - {{ lead_form.first_name.errors }} + {{ lead_form.first_name.errors }}
{{ lead_form.last_name }} - {{ lead_form.last_name.errors }} + {{ lead_form.last_name.errors }}
@@ -48,9 +45,9 @@
{{ lead_form.account_name }} - {{ lead_form.account_name.errors }} + {{ lead_form.account_name.errors }} {% if error %} - {{ error }} + {{ error }} {% endif %}
@@ -58,23 +55,23 @@
{{ lead_form.title }} - {{ lead_form.title.errors }} + {{ lead_form.title.errors }}
{{ lead_form.phone }} - {{ lead_form.phone.errors }} + {{ lead_form.phone.errors }}
{{ lead_form.email }} - {{ lead_form.email.errors }} + {{ lead_form.email.errors }} {% if error %} - {{ error }} + {{ error }} {% endif %}
@@ -82,13 +79,15 @@
- + {% if lead_obj.lead_attachment.count %} - {% for i in lead_obj.lead_attachment.all %} - - {{i.file_name}} - X - + {% for attachment in lead_obj.lead_attachment.all %} +
+ {{ attachment.file_name }} + {% if not attachment.created_by.role == 'ADMIN' or attachment.created_by.role == request.user.role %} + X + {% endif %} +
{% endfor %} {% endif %} @@ -100,14 +99,14 @@
{{ lead_form.website }} - {{ lead_form.website.errors }} + {{ lead_form.website.errors }}
{{ lead_form.description }} - {{ lead_form.description.errors }} + {{ lead_form.description.errors }}
@@ -119,14 +118,14 @@ {% endfor %} - {{ lead_form.assigned_to.errors }} + {{ lead_form.assigned_to.errors }}
{{ lead_form.status }} - {{ lead_form.status.errors }} + {{ lead_form.status.errors }}
@@ -135,34 +134,34 @@
{{ lead_form.source }} - {{ lead_form.source.errors }} + {{ lead_form.source.errors }}
{{ lead_form.address_line }} - {{ lead_form.address_line.errors }} + {{ lead_form.address_line.errors }}
{{ lead_form.street }} - {{ lead_form.street.errors }} + {{ lead_form.street.errors }}
{{ lead_form.city }} - {{ lead_form.city.errors }} + {{ lead_form.city.errors }}
{{ lead_form.state }} - {{ lead_form.state.errors }} + {{ lead_form.state.errors }}
{{ lead_form.postcode }} - {{ lead_form.postcode.errors }} + {{ lead_form.postcode.errors }}
{{ lead_form.country }} - {{ lead_form.country.errors }} + {{ lead_form.country.errors }}
@@ -177,7 +176,7 @@
- + {% if not lead_obj %} {% endif %} @@ -191,16 +190,84 @@
+
+ +
+ 0% +
+
+
{% endblock %} {% block js_block %} + + - + -
+
@@ -32,7 +30,7 @@
{{ opportunity_form.name }} - {{opportunity_form.name.errors}} + {{opportunity_form.name.errors}}
@@ -45,28 +43,28 @@ {% else %} {{opportunity_form.account}} {% endif %} - {{opportunity_form.account.errors}} + {{opportunity_form.account.errors}}
{{ opportunity_form.amount }} - {{opportunity_form.amount.errors}} + {{opportunity_form.amount.errors}}
{{ opportunity_form.currency }} - {{opportunity_form.currency.errors}} + {{opportunity_form.currency.errors}}
{{ opportunity_form.stage }} - {{opportunity_form.stage.errors}} + {{opportunity_form.stage.errors}}
@@ -75,14 +73,14 @@
{{ opportunity_form.lead_source }} - {{opportunity_form.lead_source.errors}} + {{opportunity_form.lead_source.errors}}
{{ opportunity_form.probability }} - {{opportunity_form.probability.errors}} + {{opportunity_form.probability.errors}}
@@ -99,7 +97,7 @@
{{ opportunity_form.contacts }} - {{opportunity_form.contacts.errors}} + {{opportunity_form.contacts.errors}}
@@ -111,7 +109,7 @@
- {{opportunity_form.closed_on.errors}} + {{opportunity_form.closed_on.errors}} @@ -126,18 +124,20 @@
{{ opportunity_form.description }} - {{opportunity_form.description.errors}} + {{opportunity_form.description.errors}}
- + {% if opportunity_obj.opportunity_attachment.count %} - {% for i in opportunity_obj.opportunity_attachment.all %} - - {{i.file_name}} - X - + {% for attachment in opportunity_obj.opportunity_attachment.all %} +
+ {{ attachment.file_name }} + {% if not attachment.created_by.role == 'ADMIN' or attachment.created_by.role == request.user.role %} + X + {% endif %} +
{% endfor %} {% endif %} @@ -154,7 +154,7 @@
- + {% if not opportunity_obj %} {% endif %} @@ -164,12 +164,77 @@
+
+ +
+ 0% +
+
+
{% endblock %} {% block js_block %} - + +