diff --git a/archilance/settings/base.py b/archilance/settings/base.py index 86b3daf..918e962 100644 --- a/archilance/settings/base.py +++ b/archilance/settings/base.py @@ -280,7 +280,6 @@ REST_FRAMEWORK = { ], 'PAGE_SIZE': API_PAGE_SIZE, - 'DEFAULT_FILTER_BACKENDS': ('rest_framework_filters.backends.DjangoFilterBackend',), # djangorestframework-filters } diff --git a/assets/index.js b/assets/index.js index 4301312..6cef85c 100644 --- a/assets/index.js +++ b/assets/index.js @@ -23,6 +23,12 @@ $('[data-tooltip]').tooltip({ + + + + + + // Specialization select ----------------------------------- @@ -63,18 +69,65 @@ $('[data-tooltip]').tooltip({ } - $('.-spec-select-container').each(function(i, container) { + $('.-spec-work-type-combo-container').each(function(i, container) { var $container = $(container) var $specSelects = $container.find('.-spec-select') var $chosenSpecId = $container.find('.-chosen-spec-id').first() var $specSelect1 = $container.find('.-spec-select-level-1').first() + + window.select = $specSelect1 + var $specSelect2 = $container.find('.-spec-select-level-2').first() var $specSelect3 = $container.find('.-spec-select-level-3').first() var $specSelect4 = $container.find('.-spec-select-level-4').first() var specSelects = [$specSelect1, $specSelect2, $specSelect3, $specSelect4] - reinitSpecializationsByWorkType($specSelect1, null, $container) + + + + + var $workTypeSelect = $container.find('.-project-work-type-select-field').first() + + if (!_.isEmpty($workTypeSelect)) { + var workTypeId = Number($workTypeSelect.find('option:selected').first().val()) || 1 + + $workTypeSelect.on('change', function($evt) { + var $that = $(this) + var workTypeId = Number($that.val()) + + reinitSpecializationsByWorkType(specSelects, workTypeId).then(function(rootSpec) { + updateSpecializationWidgets(rootSpec.id, $container, $chosenSpecId, specSelects) + }) + }) + } else { + var $workTypeRadios = $container.find('.-project-work-type-radios-container').first().find('input[type=radio]') + + if (!_.isEmpty($workTypeRadios)) { + var workTypeId = Number($workTypeRadios.filter(':checked').val()) || 1 + + $workTypeRadios.on('change', function($evt) { + var $that = $(this) + var workTypeId = Number($that.val()) + + reinitSpecializationsByWorkType(specSelects, workTypeId).then(function(rootSpec) { + updateSpecializationWidgets(rootSpec.id, $container, $chosenSpecId, specSelects) + }) + }) + } else { + var workTypeId = 1 + } + } + + + + + + + reinitSpecializationsByWorkType(specSelects, workTypeId).then(function(rootSpec_) { + updateSpecializationWidgets(null, $container, $chosenSpecId, specSelects) + }) + var chosenSpecId = $chosenSpecId.val() @@ -88,15 +141,8 @@ $('[data-tooltip]').tooltip({ }) - function reinitSpecializationsByWorkType($specSelect1, workTypeId, $container) { - var $chosenSpecId = $container.find('.-chosen-spec-id').first() - - var $specSelect2 = $container.find('.-spec-select-level-2').first() - var $specSelect3 = $container.find('.-spec-select-level-3').first() - var $specSelect4 = $container.find('.-spec-select-level-4').first() - var specSelects = [$specSelect1, $specSelect2, $specSelect3, $specSelect4] - - $.get('/api/specializations/?parent__name=_root') + function reinitSpecializationsByWorkType(specSelects, workTypeId) { + return $.get('/api/specializations/?parent__name=_root') .then(function(res) { var rootSpecs = res.results @@ -109,13 +155,21 @@ $('[data-tooltip]').tooltip({ var url = format('/api/specializations/?lft__gte=%s&rght__lte=%s', rootSpec.lft, rootSpec.rght) } - $specSelect1.select2(_.merge(specSelectOptions, {ajax: {url: url}})) - updateSpecializationWidgets(specId, $container, $chosenSpecId, specSelects) + specSelects[0].select2(_.merge(specSelectOptions, {ajax: {url: url}})) + specSelects[1].select2(_.merge(specSelectOptions, {ajax: {url: null}})) + specSelects[2].select2(_.merge(specSelectOptions, {ajax: {url: null}})) + specSelects[3].select2(_.merge(specSelectOptions, {ajax: {url: null}})) + + + // TODO: Hardcoded: + + specSelects[0].select2('container').closest('.col-lg-3').css('display', workTypeId === 2 ? 'none' : 'block') + + + return rootSpec }) } - window.reinitSpecializationsByWorkType = reinitSpecializationsByWorkType - function updateSpecializationWidgets(specId, $container, $chosenSpecId, specSelects) { return getSpecializationTree(specId).then(function(specs) { @@ -137,18 +191,17 @@ $('[data-tooltip]').tooltip({ $chosenSpecId.val(specId) - specSelects[1].select2('container').css('display', !specLevel1 || _.isEmpty(specLevel1.children) ? 'none' : 'block') - specSelects[2].select2('container').css('display', !specLevel2 || _.isEmpty(specLevel2.children) ? 'none' : 'block') - specSelects[3].select2('container').css('display', !specLevel3 || _.isEmpty(specLevel3.children) ? 'none' : 'block') + specSelects[1].select2('enable', Boolean(specLevel1 && !_.isEmpty(specLevel1.children))) + specSelects[2].select2('enable', Boolean(specLevel2 && !_.isEmpty(specLevel2.children))) + specSelects[3].select2('enable', Boolean(specLevel3 && !_.isEmpty(specLevel3.children))) + + specializationTreeHasLevels(specId).then(function(haveLevels) { + specSelects[1].select2('container').css('display', haveLevels.level2 ? 'block' : 'none') + specSelects[2].select2('container').css('display', haveLevels.level3 ? 'block' : 'none') + specSelects[3].select2('container').css('display', haveLevels.level4 ? 'block' : 'none') + }) }) } - - window.updateSpecializationWidgets = updateSpecializationWidgets - - - //function repopulateSpecializations() { - // - //} }()) @@ -160,6 +213,9 @@ $('[data-tooltip]').tooltip({ + + + // Specialization select (simple) ------------------------------- @@ -903,6 +959,50 @@ function getLocationTree(locId) { +function specializationTreeHasLevels(specId) { + if (specId == null) { + var haveLevels = { + level2: true, + level3: true, + level4: true, + } + + return $.when(haveLevels) + } else { + return $.get(format('/api/specializations/%s/', specId)).then(function(spec) { + return $.get(format('/api/specializations/?level=1&lft__lte=%s&rght__gte=%s', spec.lft, spec.rght)).then(function(res) { + var specTreeRoot = res.results[0] + + var url_ = format('/api/specializations/?lft__gt=%s&rght__lt=%s&level=%s', specTreeRoot.lft, specTreeRoot.rght) + + return $.when( + $.get(format(url_, 2)).then(function(res) {return res}), + $.get(format(url_, 3)).then(function(res) {return res}), + $.get(format(url_, 4)).then(function(res) {return res}) + ) + .then(function(resLvl1, resLvl2, resLvl3) { + var haveLevels = { + level2: !_.isEmpty(resLvl1.results), + level3: !_.isEmpty(resLvl2.results), + level4: !_.isEmpty(resLvl3.results), + } + + return haveLevels + }) + }) + }) + } +} + + + + + + + + + + // Utils ----------------------------------------------- diff --git a/assets/js/chat.js b/assets/js/chat.js index 66235c7..4f06bea 100644 --- a/assets/js/chat.js +++ b/assets/js/chat.js @@ -29,7 +29,7 @@ window.confirm = function (message, callback, caption) { var SocketHandler = function () { domain = domain.replace(':' + port, ''); - var url = 'ws://' + domain + ':8888/chat/' + userId + '/'; + var url = 'ws://' + domain + '/chat/' + userId + '/'; var sock = new WebSocket(url); var intervalId; sock.onopen = function () { diff --git a/projects/migrations/0043_auto_20160922_1705.py b/projects/migrations/0043_auto_20160922_1705.py new file mode 100644 index 0000000..0987b26 --- /dev/null +++ b/projects/migrations/0043_auto_20160922_1705.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-09-22 14:05 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0042_portfolio_work_type'), + ] + + operations = [ + migrations.AlterField( + model_name='portfolio', + name='work_type', + field=models.IntegerField(choices=[(1, 'Проектирование'), (2, 'Техническое сопровождение')], default=1), + ), + migrations.AlterField( + model_name='project', + name='work_type', + field=models.IntegerField(choices=[(1, 'Проектирование'), (2, 'Техническое сопровождение')], default=1), + ), + ] diff --git a/projects/serializers.py b/projects/serializers.py index 1e5dd40..8c97bdd 100755 --- a/projects/serializers.py +++ b/projects/serializers.py @@ -258,19 +258,20 @@ class PortfolioSerializer(ModelSerializer): fields = ( # 'answers', - 'budget', 'building_classification', 'construction_type', + 'location', + 'photos', + 'specialization', + 'user', + + 'budget', 'currency', 'description', 'id', - 'location', 'name', - 'photos', - 'specialization', 'term', 'term_type', - 'user', 'worksell', ) diff --git a/projects/templates/customer_project_create.html b/projects/templates/customer_project_create.html index 8969777..de73927 100644 --- a/projects/templates/customer_project_create.html +++ b/projects/templates/customer_project_create.html @@ -17,7 +17,7 @@
Новый заказ
-