From c3b4dbf505a1a2f31771f8f0fbe79f756a197cb4 Mon Sep 17 00:00:00 2001
From: ArturBaybulatov
Date: Fri, 17 Jun 2016 13:38:21 +0300
Subject: [PATCH] #ARC-12
---
archilance/mixins.py | 13 +-
archilance/wsgi.py | 15 +-
common/__init__.py | 1 +
common/templates/templatetags/inspect.html | 1 +
common/templatetags/common_tags.py | 17 ++
projects/admin.py | 16 +-
projects/forms.py | 43 ++--
.../templates/customer_project_create.html | 38 ++-
.../templates/customer_project_detail.html | 4 +-
...t.html => customer_project_edit_test.html} | 32 ++-
...roject_detail.html => project_detail.html} | 3 +-
projects/templates/project_list.html | 2 +-
projects/urls.py | 22 +-
projects/views.py | 235 ++++++++++--------
.../customer_profile_open_projects.html | 8 +-
.../customer_profile_trashed_projects.html | 8 +-
16 files changed, 289 insertions(+), 169 deletions(-)
create mode 100644 common/templates/templatetags/inspect.html
create mode 100644 common/templatetags/common_tags.py
rename projects/templates/{project_edit_test.html => customer_project_edit_test.html} (51%)
rename projects/templates/{contractor_project_detail.html => project_detail.html} (97%)
diff --git a/archilance/mixins.py b/archilance/mixins.py
index 94ed526..78f1930 100644
--- a/archilance/mixins.py
+++ b/archilance/mixins.py
@@ -4,16 +4,17 @@ from django.views.generic.base import ContextMixin
class BaseMixin(ContextMixin):
def get_context_data(self, **kwargs):
- context = super().get_context_data(**kwargs)
+ c = super().get_context_data(**kwargs)
- pk = self.kwargs.get('pk')
+ pk = self.kwargs.get('pk') # Current object's ID
+ next = self.kwargs.get('next') # Redirect back path
- if pk:
- context['pk'] = pk
+ if pk: c['pk'] = pk
+ if next: c['next'] = next
- context['domain'] = Site.objects.get_current().domain
+ c['domain'] = Site.objects.get_current().domain
- return context
+ return c
# import code; code.interact(local=dict(globals(), **locals()))
diff --git a/archilance/wsgi.py b/archilance/wsgi.py
index 88be385..69856cf 100644
--- a/archilance/wsgi.py
+++ b/archilance/wsgi.py
@@ -7,10 +7,21 @@ For more information on this file, see
https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/
"""
-import os
-
from django.core.wsgi import get_wsgi_application
+from django.template.base import Variable
+import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "archilance.settings")
application = get_wsgi_application()
+
+
+# Patch template Variable to output empty string for None values:
+
+old_resolve_lookup = Variable._resolve_lookup
+
+def new_resolve_lookup(self, *args, **kwargs):
+ val = old_resolve_lookup(self, *args, **kwargs)
+ return '' if val == None else val
+
+Variable._resolve_lookup = new_resolve_lookup
diff --git a/common/__init__.py b/common/__init__.py
index e69de29..a06fd3d 100644
--- a/common/__init__.py
+++ b/common/__init__.py
@@ -0,0 +1 @@
+default_app_config = 'common.apps.CommonConfig'
diff --git a/common/templates/templatetags/inspect.html b/common/templates/templatetags/inspect.html
new file mode 100644
index 0000000..d723e04
--- /dev/null
+++ b/common/templates/templatetags/inspect.html
@@ -0,0 +1 @@
+{{ obj }}
diff --git a/common/templatetags/common_tags.py b/common/templatetags/common_tags.py
new file mode 100644
index 0000000..925aafe
--- /dev/null
+++ b/common/templatetags/common_tags.py
@@ -0,0 +1,17 @@
+from django import template
+from pprint import pprint, pformat
+
+register = template.Library()
+
+
+@register.inclusion_tag('templatetags/inspect.html', takes_context=True)
+def inspect(context, obj):
+ return {
+ 'obj': pformat(obj.__dict__),
+ }
+
+@register.inclusion_tag('templatetags/inspect.html', takes_context=True)
+def inspect2(context, obj):
+ return {
+ 'obj': pformat(dir(obj)),
+ }
diff --git a/projects/admin.py b/projects/admin.py
index f9faa7a..4c73ff9 100644
--- a/projects/admin.py
+++ b/projects/admin.py
@@ -1,8 +1,18 @@
from django.contrib import admin
-from .models import Project, Portfolio, PortfolioPhoto, \
- Answer, Realty, Candidate, Order, Stage,\
- BuildingClassfication, ConstructionType, ProjectFile
+from .models import (
+ Answer,
+ BuildingClassfication,
+ Candidate,
+ ConstructionType,
+ Order,
+ Portfolio,
+ PortfolioPhoto,
+ Project,
+ ProjectFile,
+ Realty,
+ Stage,
+)
class ProjectAdmin(admin.ModelAdmin):
diff --git a/projects/forms.py b/projects/forms.py
index 0779cdf..e807541 100644
--- a/projects/forms.py
+++ b/projects/forms.py
@@ -10,7 +10,12 @@ from users.models import User
# RealtyFormSet = inlineformset_factory(Project, Realty)
-class ProjectForm(ModelForm):
+
+class ProjectsForm(Form):
+ name = forms.CharField(max_length=255)
+
+
+class CustomerProjectCreateForm(ModelForm):
specialization = TreeNodeChoiceField(queryset=Specialization.objects.exclude(id=1))
class Meta:
@@ -21,13 +26,13 @@ class ProjectForm(ModelForm):
'budget_by_agreement',
'cro',
'currency',
+ 'deal_type',
'name',
'price_and_term_required',
- 'deal_type',
+ 'specialization',
'term_type',
'text',
'work_type',
- 'specialization',
)
widgets = {
@@ -35,10 +40,10 @@ class ProjectForm(ModelForm):
'currency': Select(attrs={'class':'selectpicker2 valul'}),
'term_type': Select(attrs={'class':'selectpicker'}),
}
-
-
-class ProjectsForm(Form):
- name = forms.CharField(max_length=255)
+
+ def __init__(self, *args, **kwargs):
+ self.request = kwargs.pop('request')
+ super().__init__(*args, **kwargs)
class RealtyForm(ModelForm):
@@ -66,7 +71,7 @@ class PortfolioForm(ModelForm):
fields = '__all__'
-class AnswerForm(ModelForm):
+class ContractorProjectAnswerForm(ModelForm):
# def __init__(self, *args, **kwargs):
# # import code; code.interact(local=dict(globals(), **locals()))
# self.project_id = kwargs.pop('project_id')
@@ -107,9 +112,13 @@ class StageForm(ModelForm):
PortfolioPhotoFormSet = inlineformset_factory(Portfolio, PortfolioPhoto, fields=('img',))
-class ProjectTrashForm(Form):
+class ProjectEditForm(forms.ModelForm):
pk = forms.ModelChoiceField(queryset=Project.objects.none())
+ class Meta:
+ model = Project
+ fields = '__all__'
+
def __init__(self, *args, **kwargs):
self.req = kwargs.pop('req')
super().__init__(*args, **kwargs)
@@ -117,35 +126,31 @@ class ProjectTrashForm(Form):
self.fields['pk'].queryset = self.req.user.projects.filter(state='active')
-class ProjectRestoreForm(Form):
+class ProjectTrashForm(Form):
pk = forms.ModelChoiceField(queryset=Project.objects.none())
def __init__(self, *args, **kwargs):
self.req = kwargs.pop('req')
super().__init__(*args, **kwargs)
- self.fields['pk'].queryset = self.req.user.projects.filter(state='trashed')
+ self.fields['pk'].queryset = self.req.user.projects.filter(state='active')
-class ProjectDeleteForm(Form):
+class ProjectRestoreForm(Form):
pk = forms.ModelChoiceField(queryset=Project.objects.none())
def __init__(self, *args, **kwargs):
self.req = kwargs.pop('req')
super().__init__(*args, **kwargs)
- self.fields['pk'].queryset = self.req.user.projects.filter(Q(state='active') | Q(state='trashed'))
+ self.fields['pk'].queryset = self.req.user.projects.filter(state='trashed')
-class ProjectEditForm(forms.ModelForm):
+class ProjectDeleteForm(Form):
pk = forms.ModelChoiceField(queryset=Project.objects.none())
- class Meta:
- model = Project
- fields = '__all__'
-
def __init__(self, *args, **kwargs):
self.req = kwargs.pop('req')
super().__init__(*args, **kwargs)
- self.fields['pk'].queryset = self.req.user.projects.filter(state='active')
+ self.fields['pk'].queryset = self.req.user.projects.filter(Q(state='active') | Q(state='trashed'))
diff --git a/projects/templates/customer_project_create.html b/projects/templates/customer_project_create.html
index de9c2a8..172b172 100644
--- a/projects/templates/customer_project_create.html
+++ b/projects/templates/customer_project_create.html
@@ -11,18 +11,18 @@
-
+
Редактировать
-
diff --git a/projects/templates/contractor_project_detail.html b/projects/templates/project_detail.html
similarity index 97%
rename from projects/templates/contractor_project_detail.html
rename to projects/templates/project_detail.html
index cd9c4c3..a041ee0 100644
--- a/projects/templates/contractor_project_detail.html
+++ b/projects/templates/project_detail.html
@@ -102,7 +102,8 @@
-