remotes/origin/PR-39
ArturBaybulatov 9 years ago
parent b25676d215
commit fcdf640221
  1. 58
      assets/index.js
  2. 20
      projects/migrations/0036_auto_20160917_2135.py
  3. 3
      projects/models.py
  4. 22
      projects/templates/customer_project_create.html
  5. 32
      projects/templates/customer_project_edit.html

@ -9,6 +9,7 @@ var STUB_IMAGE_URL = '/static/img/profile.jpg'
// Plugins init --------------------------------------------
$('.datepicker').datepicker()
$('[data-tooltip]').tooltip({
@ -25,6 +26,7 @@ $('[data-tooltip]').tooltip({
// Specialization select -----------------------------------
;(function() {
var specSelectOptions = {
language: 'ru',
//minimumInputLength: 1, // Commented out to immediately load remote data
@ -32,7 +34,7 @@ var specSelectOptions = {
allowClear: true,
ajax: {
url: '/api/specializations/',
url: null,
dataType: 'json',
quietMillis: 250,
cache: true,
@ -58,21 +60,12 @@ var specSelectOptions = {
}
},
},
initSelection: function(element, callback) {
var id = $(element).val()
if (id !== '') {
$.ajax({url: '/api/specializations/' + id + '/', method: 'GET', dataType: 'json'})
.then(function(data) {callback(data)})
}
}
}
$('.-spec-select-container').each(function(i, container) {
var $container = $(container)
var $specSelects = $(container).find('.-spec-select')
var $specSelects = $container.find('.-spec-select')
var $chosenSpecId = $container.find('.-chosen-spec-id').first()
var $specSelect1 = $container.find('.-spec-select-level-1').first()
@ -82,8 +75,7 @@ $('.-spec-select-container').each(function(i, container) {
var specSelects = [$specSelect1, $specSelect2, $specSelect3, $specSelect4]
$specSelects.select2(specSelectOptions)
reinitSpecializationsByWorkType($specSelects, null)
var chosenSpecId = $chosenSpecId.val()
@ -97,12 +89,17 @@ $('.-spec-select-container').each(function(i, container) {
})
function reinitSpecializationsByWorkType($specSelects, workTypeId) {
$.get('/api/specializations/?parent__name=_root')
.then(function(res) {
var rootSpecs = res.results
var rootSpec = workTypeId == null ? rootSpecs[0] : ({1: rootSpecs[0], 2: rootSpecs[1], 3: rootSpecs[2]})[workTypeId]
$specSelects.select2(_.merge(specSelectOptions, {
ajax: {url: format('/api/specializations/?lft__gte=%s&rght__lte=%s', rootSpec.lft, rootSpec.rght)},
}))
})
}
function updateSpecializationWidgets(specId, $container, $chosenSpecId, specSelects) {
@ -122,6 +119,9 @@ function updateSpecializationWidgets(specId, $container, $chosenSpecId, specSele
}
window.reinitSpecializationsByWorkType = reinitSpecializationsByWorkType
}())
@ -134,10 +134,20 @@ function updateSpecializationWidgets(specId, $container, $chosenSpecId, specSele
// Specialization select (simple) -------------------------------
;(function() {
var simpleSpecSelectsOptions = {
language: 'ru',
placeholder: 'Выберите специализацию', // Required by `allowClear`
allowClear: true,
//initSelection: function(element, callback) {
// var id = $(element).val()
//
// if (id !== '') {
// $.ajax({url: '/api/specializations/' + id + '/', method: 'GET', dataType: 'json'})
// .then(function(data) {callback(data)})
// }
//}
}
var $simpleSpecContainer = $('#simpleSpecContainer')
@ -194,7 +204,7 @@ function initSimpleSpecSelect2($select, specId) {
}
})
}
}())
@ -208,6 +218,7 @@ function initSimpleSpecSelect2($select, specId) {
// Team invitation contractor select -------------------------------
;(function() {
var contractorSelectOptions = {
language: 'ru',
placeholder: 'Выберите пользователя', // Required by `allowClear`
@ -248,6 +259,8 @@ function initContractorSelect($select, excludeIds) {
return $select.select2(contractorSelectOptions)
}
window.initContractorSelect = initContractorSelect
}())
@ -303,6 +316,7 @@ function initContractorSelect($select, excludeIds) {
// Location select ----------------------------------------------
;(function() {
var $locationSelects = $('.-location-select')
var locationSelectOptions = {
@ -388,7 +402,7 @@ function loadRealtyDetails(realtyId) {
})
.then(function(res) {return res})
}
}())
@ -404,7 +418,7 @@ function loadRealtyDetails(realtyId) {
// TODO: Add file number and overall size limit support
;(function() {
var $fileUploadContainer = $('#fileUploadContainer')
$('#fileUploadAddBtn').on('click', function($evt) {
@ -440,7 +454,7 @@ $fileUploadContainer.on('click', '.existing-file-remove-btn', function($evt) {
var $btn = $(this)
$btn.closest('.existing-file-widget').remove()
})
}())

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-17 18:35
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('projects', '0035_auto_20160916_2003'),
]
operations = [
migrations.AlterField(
model_name='project',
name='work_type',
field=models.IntegerField(choices=[(1, 'Проектирование'), (2, 'Проверка документации (экспертиза)'), (3, 'Устранение замечаний в проекте (корректировка проектных решений)')], default=1),
),
]

@ -73,7 +73,8 @@ class Realty(models.Model):
class Project(models.Model, HitCountMixin):
WORK_TYPES = (
(1, 'Проектирование'),
(2, 'Техническое сопровождение')
(2, 'Проверка документации'),
(3, 'Устранение замечаний в проекте'),
)
DEAL_TYPES = (

@ -59,7 +59,7 @@
</div>
<p class="type-work">Тип работы <span data-tooltip data-placement="{% tooltip_placement pk=6 %}" title="{% tooltip pk=6 %}" class="-green-glyphicon glyphicon glyphicon-question-sign"></span> <span id="{% random_ident %}" class="-validation-error" style="color: red">{{ form.work_type.errors.as_text }}</span></p>
<div class="mail-block type-work-inset">
<div class="mail-block type-work-inset -project-work-type-selection-container">
{% for id, text in form.work_type.field.choices %}
<div class="inset-mb">
<label>
@ -334,7 +334,7 @@
// Scroll to first form validation error ------------------------------
// Scroll to first form validation error ---------------------------
;(function() {
@ -343,5 +343,23 @@
if (hash)
window.location.hash = hash
}())
// Load specialization choices by work type ---------------------------
;(function() {
var $radiosContainer = $('.-project-work-type-selection-container').first()
var $radios = $radiosContainer.find('input[type=radio][name={{ form.work_type.html_name }}]')
var $specSelectContainer = $('.-spec-select-container').first()
var $specSelects = $specSelectContainer.find('.-spec-select')
$radios.on('change', function($evt) {
var $that = $(this)
var workTypeId = $that.val()
reinitSpecializationsByWorkType($specSelects, workTypeId)
})
}())
</script>
{% endblock %}

@ -69,7 +69,7 @@
</div>
<p class="type-work">Тип работы <span id="{% random_ident %}" class="-validation-error" style="color: red">{{ form.work_type.errors.as_text }}</span></p>
<div class="mail-block type-work-inset">
<div class="mail-block type-work-inset -project-work-type-selection-container">
{% for id, text in form.work_type.field.choices %}
<div class="inset-mb">
<label>
@ -175,7 +175,7 @@
</p>
<p class="des-afer">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro vel suscipit eaque quidem voluptate aperiam enim aut libero, excepturi architecto maxime, placeat maiores, odio itaque, ex consectetur dignissimos dicta officia
{% tooltip pk=10 as tooltip10 %}{{ tooltip10|linebreaksbr }}
</p>
</div>
@ -195,7 +195,7 @@
</p>
<p class="des-afer">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro vel suscipit eaque quidem voluptate aperiam enim aut libero, excepturi architecto maxime, placeat maiores, odio itaque, ex consectetur dignissimos dicta officia
{% tooltip pk=11 as tooltip11 %}{{ tooltip11|linebreaksbr }}
</p>
</div>
</div>
@ -318,18 +318,18 @@
;(function() {
var $workTypeSuggestionModal = $('#projectWorkTypeSuggestionModal')
var $form = $workTypeSuggestionModal.find('.-project-work-type-suggestion-form').first()
var $modal = $('#projectWorkTypeSuggestionModal')
var $form = $modal.find('.-project-work-type-suggestion-form').first()
var workTypeSuggestionUrl = '/projects/suggest-work-type/'
$workTypeSuggestionModal.find('.-action-button').first().on('click', function($evt) {
$modal.find('.-action-button').first().on('click', function($evt) {
$.post(workTypeSuggestionUrl, $form.serialize())
.then(function(res) {
if (res.status === 'success') {
console.log('Success')
$form.trigger('reset')
$('.-error').text('')
$workTypeSuggestionModal.modal('hide')
$modal.modal('hide')
$.jGrowl('Предложение успешно отправлено')
} else if (res.status === 'error') {
console.log('Error')
@ -360,5 +360,23 @@
if (hash)
window.location.hash = hash
}())
// Load specialization choices by work type ---------------------------
;(function() {
var $radiosContainer = $('.-project-work-type-selection-container').first()
var $radios = $radiosContainer.find('input[type=radio][name={{ form.work_type.html_name }}]')
var $specSelectContainer = $('.-spec-select-container').first()
var $specSelects = $specSelectContainer.find('.-spec-select')
$radios.on('change', function($evt) {
var $that = $(this)
var workTypeId = $that.val()
reinitSpecializationsByWorkType($specSelects, workTypeId)
})
}())
</script>
{% endblock %}

Loading…
Cancel
Save