remotes/origin/PR-39
PekopT 9 years ago
parent 669d1d5db0
commit 73471e1b3c
  1. 2
      archilance/settings/base.py
  2. 4
      assets/css/main.css
  3. 56
      assets/index.js
  4. 9
      projects/models.py
  5. 11
      projects/templates/_trash/project_form.html
  6. 4
      specializations/admin.py
  7. 2
      specializations/serializers.py
  8. 20
      users/migrations/0019_user_is_staff.py
  9. 7
      users/models.py

@ -173,8 +173,8 @@ AUTHENTICATION_BACKENDS = (
'social.backends.vk.VKOAuth2',
'social.backends.odnoklassniki.OdnoklassnikiOAuth2',
'social.backends.mailru.MailruOAuth2',
# 'django.contrib.auth.backends.ModelBackend',
'users.backend.EmailOrUsernameModelBackend',
'django.contrib.auth.backends.ModelBackend',
)
# SOCIAL_AUTH_FACEBOOK_KEY = '222531191461451'

@ -5996,10 +5996,10 @@ a.linkS2[data-target="#withdraw-money"]{
line-height: 15px;
}
.tooltip.top{
margin-top: 0px;
margin-top: 0;
}
.changeBlock {
min-height: 450px;
min-height: 500px;
display: table;
padding: 143px 20px 120px 20px;
}

@ -1,10 +1,10 @@
// Constants -----------------------------------------------
var API_PAGE_SIZE = 100
var LIVE_IMAGE_UPLOAD_URL = '/common/live-image-upload/create/'
var STUB_IMAGE_URL = '/static/img/profile.jpg'
var API_PAGE_SIZE = 100;
var LIVE_IMAGE_UPLOAD_URL = '/common/live-image-upload/create/';
var STUB_IMAGE_URL = '/static/img/profile.jpg';
var DEFAULT_WORK_TYPE = 403;
// Plugins init --------------------------------------------
@ -90,32 +90,32 @@ $('[data-tooltip]').tooltip({
var $workTypeSelect = $container.find('.-project-work-type-select-field').first()
if (!_.isEmpty($workTypeSelect)) {
var workTypeId = Number($workTypeSelect.find('option:selected').first().val()) || 1
var workTypeId = Number($workTypeSelect.find('option:selected').first().val()) || DEFAULT_WORK_TYPE;
$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)
updateSpecializationWidgets(workTypeId, $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
var workTypeId = Number($workTypeRadios.filter(':checked').val()) || DEFAULT_WORK_TYPE;
$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)
updateSpecializationWidgets(workTypeId, $container, $chosenSpecId, specSelects)
})
})
} else {
var workTypeId = 1
var workTypeId = DEFAULT_WORK_TYPE;
}
}
@ -142,29 +142,35 @@ $('[data-tooltip]').tooltip({
function reinitSpecializationsByWorkType(specSelects, workTypeId) {
return $.get('/api/specializations/?parent__name=_root')
return $.get('/api/specializations/?parent__id='+workTypeId)
.then(function(res) {
var rootSpecs = res.results
var rootSpecs = res.results;
console.log('workTypeId', workTypeId)
if (workTypeId == null) {
var url = '/api/specializations/'
var specId = null
var url = '/api/specializations/';
// var specId = null
} else {
var rootSpec = ({1: rootSpecs[0], 2: rootSpecs[1], 3: rootSpecs[2]})[workTypeId]
var specId = rootSpec.id
var specializations = {};
$.each(rootSpecs, function(key, spec) {
specializations[spec.id] = spec;
});
// var rootSpec = specializations[workTypeId];
var rootSpec = rootSpecs[0].parent;
console.log('rootSpec', rootSpec);
// var specId = rootSpec.id
var url = format('/api/specializations/?lft__gte=%s&rght__lte=%s', rootSpec.lft, rootSpec.rght)
}
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}}))
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('.-single-spec-select').css('display', workTypeId === 2 ? 'none' : 'block')
specSelects[1].select2('container').closest('.-single-spec-select').find('.-dynamic-label').first().text(workTypeId === 2 ? 'Перечень услуг' : 'Стадия проекта')
// specSelects[0].select2('container').closest('.-single-spec-select').css('display', workTypeId === 2 ? 'none' : 'block');
specSelects[1].select2('container').closest('.-single-spec-select').find('.-dynamic-label').first().text(workTypeId === 2 ? 'Перечень услуг' : 'Стадия проекта');
return rootSpec
@ -176,9 +182,9 @@ $('[data-tooltip]').tooltip({
return getSpecializationTree(specId).then(function(specs) {
var spec = specs.spec
specSelects[1].select2(_.merge(specSelectOptions, {ajax: {url: specs.urlLevel2}}))
specSelects[2].select2(_.merge(specSelectOptions, {ajax: {url: specs.urlLevel3}}))
specSelects[3].select2(_.merge(specSelectOptions, {ajax: {url: specs.urlLevel4}}))
specSelects[1].select2(_.merge(specSelectOptions, {ajax: {url: specs.urlLevel2}}));
specSelects[2].select2(_.merge(specSelectOptions, {ajax: {url: specs.urlLevel3}}));
specSelects[3].select2(_.merge(specSelectOptions, {ajax: {url: specs.urlLevel4}}));
var specLevel1 = specs.specLevel1;
var specLevel2 = specs.specLevel2;

@ -83,11 +83,7 @@ class Realty(models.Model):
class Project(models.Model, HitCountMixin):
WORK_TYPES = (
(1, 'Проектирование'),
(2, 'Техническое сопровождение'),
# (3, 'Устранение замечаний в проекте'),
)
WORK_TYPES = tuple([(x.pk, x.name) for x in Specialization.objects.filter(level=1)])
DEAL_TYPES = (
('secure_deal', 'Безопасная сделка'), # "Безопасная сделка (с резервированием бюджета)"
@ -117,6 +113,9 @@ class Project(models.Model, HitCountMixin):
text = models.TextField(blank=True)
work_type = models.IntegerField(default=1, choices=WORK_TYPES)
def __init__(self, *args, **kwargs):
super(Project, self).__init__(*args, **kwargs)
def __str__(self):
return self.name

@ -45,15 +45,12 @@
</div>
<p class="type-work">{% trans 'project_stage0' %}:</p>
<div class="mail-block type-work-inset">
{% for type in project_form.work_type.choices %}
<div class="inset-mb">
<label><input type="radio" value="1" name="{{ project_form.type_work.name }}"><span></span></label>
<p>Проектирование</p>
</div>
<div class="inset-mb">
<label><input type="radio" value="2" name="{{ project_form.type_work.name }}"><span></span></label>
<p>Техническое сопровождение</p>
<label><input type="radio" value="{{ x.0 }}" name="{{ project_form.type_work.name }}"><span></span></label>
<p>{{ x.1 }}</p>
</div>
{% endfor %}
</div>
<div class="textAreaBlock2 box-sizing disTab">
<a href="javascriptt:void(0)" class="new-link new-lw">+ Добавить раздел</a>

@ -6,7 +6,9 @@ from .models import Specialization
class SpecializationAdmin(MPTTModelAdmin):
readonly_fields = ('pk', 'lft', 'rght', 'tree_id', 'level')
list_display = ('pk', 'name', 'order')
list_display = ('pk', 'name', 'order', 'level', 'parent')
list_filter = ('level', )
def get_queryset(self, request):
qs = super(SpecializationAdmin, self).get_queryset(request)

@ -30,7 +30,7 @@ class SpecializationSerializer(ModelSerializer):
fields = (
'children',
'parent',
'projects',
# 'projects',
'id',
'level',

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-10-15 00:53
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0018_auto_20160913_0215'),
]
operations = [
migrations.AddField(
model_name='user',
name='is_staff',
field=models.BooleanField(default=False),
),
]

@ -142,6 +142,7 @@ class User(AbstractBaseUser, PermissionsMixin):
first_name = models.CharField(max_length=255, blank=True)
gender = models.CharField(max_length=30, choices=GENDERS, blank=True, null=True)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
last_name = models.CharField(max_length=255, blank=True)
last_time_visit = models.DateTimeField(default=timezone.now)
location = TreeForeignKey('common.Location', related_name='users', null=True, blank=True)
@ -162,9 +163,9 @@ class User(AbstractBaseUser, PermissionsMixin):
elif self.location.level == 1:
return self.location.name
@property
def is_staff(self):
return self.is_superuser
# @property
# def is_staff(self):
# return self.is_superuser
def __str__(self):
return self.email

Loading…
Cancel
Save