remotes/origin/PR-39
ArturBaybulatov 9 years ago
parent 1a18dd2d1c
commit afa764227c
  1. 6
      projects/forms.py
  2. 20
      projects/migrations/0041_auto_20160920_1628.py
  3. 20
      projects/migrations/0042_portfolio_work_type.py
  4. 1
      projects/models.py
  5. 46
      projects/templates/contractor_portfolio_edit.html
  6. 12
      projects/templates/project_detail.html
  7. 13
      projects/views.py
  8. 66
      users/templates/contractor_profile.html
  9. 11
      users/templates/portfolio_create_form.html
  10. 11
      users/templates/worksell_create_form.html
  11. 4
      work_sell/forms.py
  12. 20
      work_sell/migrations/0016_worksell_work_type.py
  13. 3
      work_sell/models.py
  14. 48
      work_sell/templates/worksell_edit.html

@ -178,10 +178,10 @@ class PortfolioForm(forms.ModelForm):
class Meta:
model = Portfolio
fields = '__all__'
widgets = {
'construction_type': forms.Select(attrs={'class': 'selectpicker'}),
'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'}),
}
@ -216,6 +216,7 @@ class PortfolioEditForm(forms.ModelForm):
'name',
'term',
'term_type',
'work_type',
'worksell',
)
@ -224,6 +225,7 @@ class PortfolioEditForm(forms.ModelForm):
'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'}),
}
def __init__(self, *args, **kwargs):

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-20 13:28
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('projects', '0040_merge'),
]
operations = [
migrations.AlterField(
model_name='project',
name='work_type',
field=models.IntegerField(choices=[(1, 'Проектирование'), (2, 'Проверка документации')], default=1),
),
]

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-20 15:37
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('projects', '0041_auto_20160920_1628'),
]
operations = [
migrations.AddField(
model_name='portfolio',
name='work_type',
field=models.IntegerField(choices=[(1, 'Проектирование'), (2, 'Проверка документации')], default=1),
),
]

@ -330,6 +330,7 @@ class Portfolio(models.Model):
term = models.IntegerField(default=0, null=True, blank=True)
term_type = models.CharField(max_length=20, choices=TERM_TYPES, default='hour', null=True, blank=True)
user = models.ForeignKey(User, related_name='portfolios', null=True, blank=True)
work_type = models.IntegerField(default=1, choices=Project.WORK_TYPES)
worksell = models.BooleanField(default=False)
def __str__(self):

@ -39,6 +39,16 @@
<textarea name="{{ form.description.html_name }}" id="text-new">{{ form.description.value }}</textarea>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Тип работы <span style="color: red">{{ form.work_type.errors.as_text }}</span></p>
</div>
<div class="col-lg-3">
<div class="polsF1 disTab" style="padding:0;">
{{ form.work_type }}
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Специализации</p>
</div>
@ -160,3 +170,39 @@
</div>
</div>
{% endblock %}
{% block js_block %}
<script>
// Load specialization choices by work type ---------------------------
;(function() {
var $specSelectContainer = $('.-spec-select-container').first()
var $specSelects = $specSelectContainer.find('.-spec-select')
var $chosenSpecId = $specSelectContainer.find('.-chosen-spec-id').first()
var $specSelect1 = $specSelectContainer.find('.-spec-select-level-1').first()
var $specSelect2 = $specSelectContainer.find('.-spec-select-level-2').first()
var $specSelect3 = $specSelectContainer.find('.-spec-select-level-3').first()
var $specSelect4 = $specSelectContainer.find('.-spec-select-level-4').first()
var specSelects = [$specSelect1, $specSelect2, $specSelect3, $specSelect4]
var $workTypeSelect = $('.-project-work-type-select-field').first()
var workTypeId = Number($workTypeSelect.find('option:selected').first().val()) || 1
reinitSpecializationsByWorkType($specSelects, workTypeId)
var chosenSpecId = $chosenSpecId.val()
if (chosenSpecId)
updateSpecializationWidgets(chosenSpecId, $specSelectContainer, $chosenSpecId, specSelects)
$workTypeSelect.on('change', function($evt) {
var $that = $(this)
var workTypeId = Number($that.val())
reinitSpecializationsByWorkType($specSelects, workTypeId)
})
}())
</script>
{% endblock %}

@ -538,7 +538,7 @@
{% elif request.user.is_customer and project in request.user.customer_projects.all %}
<div class="exBigBlock disTab">
<div class="exBigBlock disTab -answers-scroll-to">
<div class="col-lg-12">
<p id="answers" class="titleEx">Исполнители</p>
</div>
@ -1171,5 +1171,15 @@
window.toggleProjectAnswerForm = toggleProjectAnswerForm
}())
// Scroll to answers -------------------------------------
setTimeout(function() {
if (_.includes(window.location.hash, ['#new-answers','#candidate-answers','#rejected-answers'])) {
$(window).scrollTop($('.-answers-scroll-to').first().offset().top)
}
}, 100)
</script>
{% endblock %}

@ -111,7 +111,18 @@ class ProjectDetailWithAnswerView(BaseMixin, View):
if request.POST.get('answer_as_team') == 'on':
answer_as_team = True
# Check for duplicate answers:
if answer_as_team and util.has_related(request.user, 'team'):
if project.answers.filter(object_id=request.user.team.pk, content_type__model='team').exists():
raise PermissionDenied('Повторный отклик')
else:
if project.answers.filter(object_id=request.user.pk, content_type__model='user').exists():
raise PermissionDenied('Повторный отклик')
if answer_as_team:
form = self.form_class(request.POST, request=request, answer_as_team=True, project=project)
else:

@ -635,7 +635,7 @@
var portfUrl = new URI('/api/portfolios/')
var workSellUrl = new URI('/api/work-sells/')
var pageSize = {% if TESTING %}99999{% else %}9{% endif %}
var pageSize = {% if TESTING %}99{% else %}9{% endif %}
function loadMorePortfolios() {
var query = portfUrl.query(true)
@ -817,8 +817,72 @@
// Load portfolio specialization choices by work type ---------------------------
;(function() {
var $specSelectContainer = $('.-spec-select-container.-for-portfolios').first()
var $specSelects = $specSelectContainer.find('.-spec-select')
var $chosenSpecId = $specSelectContainer.find('.-chosen-spec-id').first()
var $specSelect1 = $specSelectContainer.find('.-spec-select-level-1').first()
var $specSelect2 = $specSelectContainer.find('.-spec-select-level-2').first()
var $specSelect3 = $specSelectContainer.find('.-spec-select-level-3').first()
var $specSelect4 = $specSelectContainer.find('.-spec-select-level-4').first()
var specSelects = [$specSelect1, $specSelect2, $specSelect3, $specSelect4]
var $workTypeSelect = $('.-project-work-type-select-field').first()
var workTypeId = Number($workTypeSelect.find('option:selected').first().val()) || 1
reinitSpecializationsByWorkType($specSelects, workTypeId)
var chosenSpecId = $chosenSpecId.val()
if (chosenSpecId)
updateSpecializationWidgets(chosenSpecId, $specSelectContainer, $chosenSpecId, specSelects)
$workTypeSelect.on('change', function($evt) {
var $that = $(this)
var workTypeId = Number($that.val())
reinitSpecializationsByWorkType($specSelects, workTypeId)
})
}())
// Load "work_sell" specialization choices by work type ---------------------------
;(function() {
var $specSelectContainer = $('.-spec-select-container.-for-work-sell').first()
var $specSelects = $specSelectContainer.find('.-spec-select')
var $chosenSpecId = $specSelectContainer.find('.-chosen-spec-id').first()
var $specSelect1 = $specSelectContainer.find('.-spec-select-level-1').first()
var $specSelect2 = $specSelectContainer.find('.-spec-select-level-2').first()
var $specSelect3 = $specSelectContainer.find('.-spec-select-level-3').first()
var $specSelect4 = $specSelectContainer.find('.-spec-select-level-4').first()
var specSelects = [$specSelect1, $specSelect2, $specSelect3, $specSelect4]
var $workTypeSelect = $('.-project-work-type-select-field').first()
var workTypeId = Number($workTypeSelect.find('option:selected').first().val()) || 1
reinitSpecializationsByWorkType($specSelects, workTypeId)
var chosenSpecId = $chosenSpecId.val()
if (chosenSpecId)
updateSpecializationWidgets(chosenSpecId, $specSelectContainer, $chosenSpecId, specSelects)
$workTypeSelect.on('change', function($evt) {
var $that = $(this)
var workTypeId = Number($that.val())
reinitSpecializationsByWorkType($specSelects, workTypeId)
})
}())

@ -18,12 +18,21 @@
<textarea name="{{ portfolio_form.description.html_name }}"
id="text-new">{{ portfolio_form.description.value }}</textarea>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Тип работы</p>
</div>
<div class="polsF1 disTab">
<div class="col-lg-4">
{{ portfolio_form.work_type }}
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Специализации</p>
</div>
<div class="-spec-select-container">
<div class="-spec-select-container -for-portfolios">
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-1" style="width: 100%">
</div>

@ -14,12 +14,21 @@
<p>Подробно опишите задание <span style="color: red">{{ worksell_form.description.errors.as_text }}</span></p>
<textarea name="{{ worksell_form.description.html_name }}" id="text-new">{{ worksell_form.description.value }}</textarea>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Тип работы</p>
</div>
<div class="polsF1 disTab">
<div class="col-lg-4">
{{ worksell_form.work_type }}
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Специализации</p>
</div>
<div class="-spec-select-container">
<div class="-spec-select-container -for-work-sell">
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-1" style="width: 100%">
</div>

@ -45,13 +45,15 @@ class WorkSellForm(forms.ModelForm):
'name',
'term',
'term_type',
'work_type',
)
widgets = {
'construction_type': forms.Select(attrs={'class': 'selectpicker'}),
'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'}),
'work_type': forms.Select(attrs={'class': 'selectpicker -project-work-type-select-field'}),
}
def __init__(self, *args, **kwargs):

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-20 13:28
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('work_sell', '0015_auto_20160915_2056'),
]
operations = [
migrations.AddField(
model_name='worksell',
name='work_type',
field=models.IntegerField(choices=[(1, 'Проектирование'), (2, 'Проверка документации')], default=1),
),
]

@ -4,7 +4,7 @@ from mptt.models import TreeForeignKey
from sorl.thumbnail import ImageField
from users.models import User, Team
from projects.models import BuildingClassfication, ConstructionType, TERM_TYPES, CURRENCIES
from projects.models import BuildingClassfication, ConstructionType, TERM_TYPES, CURRENCIES, Project
from specializations.models import Specialization
@ -24,6 +24,7 @@ class WorkSell(models.Model):
team = models.ForeignKey(Team, related_name='work_sells', null=True, blank=True)
term = models.IntegerField(default=0, null=True, blank=True)
term_type = models.CharField(max_length=20, choices=TERM_TYPES, default='hour', null=True, blank=True)
work_type = models.IntegerField(default=1, choices=Project.WORK_TYPES)
def __str__(self):
return self.name

@ -38,7 +38,17 @@
<textarea name="{{ form.description.html_name }}" id="text-new">{{ form.description.value }}</textarea>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Тип работы <span style="color: red">{{ form.work_type.errors.as_text }}</span></p>
</div>
<div class="col-lg-3">
<div class="polsF1 disTab" style="padding:0;">
{{ form.work_type }}
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Специализации <span style="color: red">{{ form.specialization.errors.as_text }}</span></p>
</div>
@ -161,3 +171,39 @@
</div>
</div>
{% endblock %}
{% block js_block %}
<script>
// Load specialization choices by work type ---------------------------
;(function() {
var $specSelectContainer = $('.-spec-select-container').first()
var $specSelects = $specSelectContainer.find('.-spec-select')
var $chosenSpecId = $specSelectContainer.find('.-chosen-spec-id').first()
var $specSelect1 = $specSelectContainer.find('.-spec-select-level-1').first()
var $specSelect2 = $specSelectContainer.find('.-spec-select-level-2').first()
var $specSelect3 = $specSelectContainer.find('.-spec-select-level-3').first()
var $specSelect4 = $specSelectContainer.find('.-spec-select-level-4').first()
var specSelects = [$specSelect1, $specSelect2, $specSelect3, $specSelect4]
var $workTypeSelect = $('.-project-work-type-select-field').first()
var workTypeId = Number($workTypeSelect.find('option:selected').first().val()) || 1
reinitSpecializationsByWorkType($specSelects, workTypeId)
var chosenSpecId = $chosenSpecId.val()
if (chosenSpecId)
updateSpecializationWidgets(chosenSpecId, $specSelectContainer, $chosenSpecId, specSelects)
$workTypeSelect.on('change', function($evt) {
var $that = $(this)
var workTypeId = Number($that.val())
reinitSpecializationsByWorkType($specSelects, workTypeId)
})
}())
</script>
{% endblock %}

Loading…
Cancel
Save