diff --git a/assets/css/main.css b/assets/css/main.css
index 76c87ce..5546aa2 100644
--- a/assets/css/main.css
+++ b/assets/css/main.css
@@ -1988,6 +1988,7 @@ input[type="checkbox"]:checked + span {
position: relative;
text-align: left;
padding: 22px 61px 22px 21px;
+ height: 94px;
}
.profileTabs2 ul .active a:after {
@@ -5609,7 +5610,7 @@ input[type="radio"]:checked + span {
}
.dashedCol4 {
width: 254px;
- height: 199px;
+ height: 156px;
position: absolute;
overflow: hidden;
display: block;
diff --git a/assets/img/listExecutor.png b/assets/img/listExecutor.png
index 458dd55..fc47cb2 100644
Binary files a/assets/img/listExecutor.png and b/assets/img/listExecutor.png differ
diff --git a/assets/js/chat_customer.js b/assets/js/chat_customer.js
index ebc8f3a..fab9143 100644
--- a/assets/js/chat_customer.js
+++ b/assets/js/chat_customer.js
@@ -70,6 +70,7 @@ $(function () {
} else {
$("#stages-pay-form #stagesIds").val(currIdStage);
$("#stagesSelect").prop('disabled', false);
+ $(".stageSum").text(sumStage);
}
});
diff --git a/chat/chat.py b/chat/chat.py
index 57786f5..3da067e 100644
--- a/chat/chat.py
+++ b/chat/chat.py
@@ -127,7 +127,7 @@ class ChatHandler(websocket.WebSocketHandler):
sender_name = msg_data[5]
msg_time = msg_data[2].strftime("%Y-%m-%d %H:%M:%S")
if docs_links:
- message += '
' + docs_links;
+ message += '
' + docs_links
if message_type:
waiters = tuple(w for c, w in self.waiters if c == recipent_id)
diff --git a/projects/admin.py b/projects/admin.py
index 703d11d..be22c8a 100644
--- a/projects/admin.py
+++ b/projects/admin.py
@@ -1,5 +1,6 @@
from django import forms
from django.contrib import admin
+from mptt.admin import MPTTModelAdmin
from .models import (
Answer,
@@ -18,6 +19,10 @@ from .models import (
)
+class BuildingClassficationAdmin(MPTTModelAdmin):
+ readonly_fields = ('pk', 'lft', 'rght', 'tree_id', 'level')
+
+
class ProjectAdminForm(forms.ModelForm):
files = forms.ModelMultipleChoiceField(queryset=ProjectFile.objects.none(), required=False)
@@ -44,7 +49,7 @@ class StageAdmin(admin.ModelAdmin):
admin.site.register(Answer)
admin.site.register(Arbitration)
-admin.site.register(BuildingClassfication)
+admin.site.register(BuildingClassfication,BuildingClassficationAdmin)
admin.site.register(Candidate)
admin.site.register(ConstructionType)
admin.site.register(Order, OrderAdmin)
diff --git a/projects/forms.py b/projects/forms.py
index 43f77c5..ec0e9b3 100644
--- a/projects/forms.py
+++ b/projects/forms.py
@@ -6,7 +6,11 @@ from pprint import pprint, pformat
import itertools
import pydash as _; _.map = _.map_; _.filter = _.filter_
-from .models import Project, ProjectFile, Portfolio, Answer, AnswerMessage, Realty, PortfolioPhoto, Stage, ProjectWorkTypeSuggestion
+from .models import (
+ Project, ProjectFile, Portfolio, Answer,
+ AnswerMessage, Realty, PortfolioPhoto, Stage,
+ ProjectWorkTypeSuggestion, BuildingClassfication
+)
from archilance import util
from common.models import Location, LiveImageUpload
from specializations.models import Specialization
@@ -145,6 +149,15 @@ class CustomerProjectEditForm(forms.ModelForm):
class RealtyForm(forms.ModelForm):
+ building_classification = TreeNodeChoiceField(
+ BuildingClassfication.objects.all(),
+ label="", initial='',
+ widget=forms.Select(attrs={
+ 'class': 'selectpicker',
+ 'id': 'realtyBuildingClassificationId'
+ })
+ )
+
class Meta:
model = Realty
@@ -157,7 +170,6 @@ class RealtyForm(forms.ModelForm):
widgets = {
'construction_type': forms.Select(attrs={'class': 'selectpicker'}),
- 'building_classification': forms.Select(attrs={'class': 'selectpicker'}),
}
def __init__(self, *args, **kwargs):
@@ -168,10 +180,15 @@ class RealtyForm(forms.ModelForm):
self.fields['name'].required = False
self.fields['location'].queryset = Location.objects.root_nodes()[0].get_descendants()
+ self.fields['building_classification'].queryset = BuildingClassfication.objects.root_nodes()[0].get_descendants()
# self.fields['location'].queryset = Location.objects # Migrate with this enabled
class PortfolioForm(forms.ModelForm):
+ building_classification = TreeNodeChoiceField(
+ BuildingClassfication.objects.exclude(name='_root'),
+ widget=forms.Select(attrs={'class': 'selectpicker'}),
+ )
duplicate = forms.BooleanField(required=False, label='Some label here')
images_ids = forms.CharField(required=True)
@@ -180,7 +197,6 @@ class PortfolioForm(forms.ModelForm):
fields = '__all__'
widgets = {
- 'building_classification': forms.Select(attrs={'class': 'selectpicker'}),
'construction_type': forms.Select(attrs={'class': 'selectpicker'}),
'currency': forms.Select(attrs={'class': 'selectpicker'}),
'term_type': forms.Select(attrs={'class': 'selectpicker'}),
@@ -201,6 +217,11 @@ class PortfolioEditForm(forms.ModelForm):
widget=forms.CheckboxSelectMultiple,
required=False,
)
+
+ building_classification = TreeNodeChoiceField(
+ BuildingClassfication.objects.exclude(name='_root'),
+ widget=forms.Select(attrs={'class': 'selectpicker'}),
+ )
class Meta:
model = Portfolio
@@ -222,7 +243,6 @@ class PortfolioEditForm(forms.ModelForm):
widgets = {
'construction_type': forms.Select(attrs={'class': 'selectpicker'}),
- 'building_classification': forms.Select(attrs={'class': 'selectpicker'}),
'currency': forms.Select(attrs={'class': 'selectpicker'}),
'term_type': forms.Select(attrs={'class': 'selectpicker'}),
'work_type': forms.Select(attrs={'class': 'selectpicker -project-work-type-select-field'}),
diff --git a/projects/migrations/0043_auto_20160921_2324.py b/projects/migrations/0043_auto_20160921_2324.py
new file mode 100644
index 0000000..a547a15
--- /dev/null
+++ b/projects/migrations/0043_auto_20160921_2324.py
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-21 20:24
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import django.db.models.manager
+import mptt.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('projects', '0042_portfolio_work_type'),
+ ]
+
+ operations = [
+ migrations.AlterModelManagers(
+ name='buildingclassfication',
+ managers=[
+ ('_default_manager', django.db.models.manager.Manager()),
+ ],
+ ),
+ migrations.AddField(
+ model_name='buildingclassfication',
+ name='level',
+ field=models.PositiveIntegerField(db_index=True, default=0, editable=False),
+ preserve_default=False,
+ ),
+ migrations.AddField(
+ model_name='buildingclassfication',
+ name='lft',
+ field=models.PositiveIntegerField(db_index=True, default=0, editable=False),
+ preserve_default=False,
+ ),
+ migrations.AddField(
+ model_name='buildingclassfication',
+ name='parent',
+ field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='projects.BuildingClassfication'),
+ ),
+ migrations.AddField(
+ model_name='buildingclassfication',
+ name='rght',
+ field=models.PositiveIntegerField(db_index=True, default=0, editable=False),
+ preserve_default=False,
+ ),
+ migrations.AddField(
+ model_name='buildingclassfication',
+ name='tree_id',
+ field=models.PositiveIntegerField(db_index=True, default=0, editable=False),
+ preserve_default=False,
+ ),
+ ]
diff --git a/projects/migrations/0044_auto_20160921_2353.py b/projects/migrations/0044_auto_20160921_2353.py
new file mode 100644
index 0000000..3ee89be
--- /dev/null
+++ b/projects/migrations/0044_auto_20160921_2353.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-21 20:53
+from __future__ import unicode_literals
+
+from django.db import migrations
+import django.db.models.deletion
+import mptt.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('projects', '0043_auto_20160921_2324'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='realty',
+ name='building_classification',
+ field=mptt.fields.TreeForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='realties', to='projects.BuildingClassfication'),
+ ),
+ ]
diff --git a/projects/migrations/0045_auto_20160922_0039.py b/projects/migrations/0045_auto_20160922_0039.py
new file mode 100644
index 0000000..1881f4f
--- /dev/null
+++ b/projects/migrations/0045_auto_20160922_0039.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-21 21:39
+from __future__ import unicode_literals
+
+from django.db import migrations
+import django.db.models.deletion
+import mptt.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('projects', '0044_auto_20160921_2353'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='portfolio',
+ name='building_classification',
+ field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='projects.BuildingClassfication'),
+ ),
+ ]
diff --git a/projects/models.py b/projects/models.py
index e3cba62..b809d76 100644
--- a/projects/models.py
+++ b/projects/models.py
@@ -5,7 +5,7 @@ from django.db.models import Q
from django.core.exceptions import ValidationError
from django.utils import timezone
from hitcount.models import HitCountMixin
-from mptt.models import TreeForeignKey
+from mptt.models import TreeForeignKey, MPTTModel
import pydash as _; _.map = _.map_; _.filter = _.filter_
from users.models import User, Team
@@ -33,8 +33,9 @@ TERM_TYPE_MORPHS = {
}
-class BuildingClassfication(models.Model):
+class BuildingClassfication(MPTTModel):
name = models.CharField(max_length=255)
+ parent = TreeForeignKey('self', blank=True, null=True, related_name='children', db_index=True)
def __str__(self):
return self.name
@@ -56,7 +57,7 @@ class ConstructionType(models.Model):
class Realty(models.Model):
- building_classification = models.ForeignKey(BuildingClassfication, related_name='realties')
+ building_classification = TreeForeignKey(BuildingClassfication, related_name='realties')
construction_type = models.ForeignKey(ConstructionType, related_name='realties')
location = TreeForeignKey('common.Location', related_name='realties', null=True, blank=True)
name = models.CharField(max_length=255)
@@ -319,7 +320,7 @@ class Candidate(models.Model):
class Portfolio(models.Model):
budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True, blank=True)
- building_classification = models.ForeignKey(BuildingClassfication, related_name='portfolios', null=True, blank=True)
+ building_classification = TreeForeignKey(BuildingClassfication, related_name='portfolios', null=True, blank=True)
construction_type = models.ForeignKey(ConstructionType, related_name='portfolios', null=True, blank=True)
created = models.DateTimeField(auto_now_add=True, auto_created=True)
currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES, null=True, blank=True)
diff --git a/projects/templates/customer_project_create.html b/projects/templates/customer_project_create.html
index de73927..a6c5ec6 100644
--- a/projects/templates/customer_project_create.html
+++ b/projects/templates/customer_project_create.html
@@ -237,14 +237,15 @@
value="{{ realty_form.name.value }}">