remotes/origin/setup
ArturBaybulatov 10 years ago
parent eea72e96a3
commit 32e601f818
  1. 5
      archilance/management/commands/generate_portfolios.py
  2. 36
      projects/forms.py
  3. 19
      projects/migrations/0002_remove_portfolio_team.py
  4. 1
      projects/models.py
  5. 19
      projects/templates/project_detail.html
  6. 45
      projects/views.py
  7. 25
      users/migrations/0008_auto_20160812_1018.py
  8. 21
      work_sell/migrations/0003_auto_20160812_1018.py

@ -48,10 +48,7 @@ class Command(BaseCommand):
portf.save()
if _.sample((True, False)):
portf.user = User.contractor_objects.order_by('?').first()
else:
portf.team = Team.objects.order_by('?').first()
portf.user = User.contractor_objects.order_by('?').first()
portf.building_classification = BuildingClassfication.objects.order_by('?').first()
portf.construction_type = ConstructionType.objects.order_by('?').first()

@ -164,38 +164,19 @@ class PortfolioForm(forms.ModelForm):
'term_type': forms.Select(attrs={'class': 'selectpicker'}),
}
class ContractorProjectAnswerForm(forms.ModelForm):
class ProjectAnswerForm(forms.ModelForm):
class Meta:
model = Answer
# ('author', 'Relation? True', 'Null? None', 'Blank? None'),
# ('content_type', 'Relation? True', 'Null? False', 'Blank? False'),
# ('portfolios', 'Relation? True', 'Null? False', 'Blank? True'),
# ('project', 'Relation? True', 'Null? False', 'Blank? False'),
#
# ('candidates', 'Relation? True', 'Null? True', 'Blank? None'),
# ('files', 'Relation? True', 'Null? True', 'Blank? None'),
#
#
# ('budget', 'Relation? False', 'Null? False', 'Blank? False'),
# ('created', 'Relation? False', 'Null? False', 'Blank? False'),
# ('currency', 'Relation? False', 'Null? False', 'Blank? False'),
# ('object_id', 'Relation? False', 'Null? False', 'Blank? False'),
# ('term', 'Relation? False', 'Null? False', 'Blank? False'),
# ('term_type', 'Relation? False', 'Null? False', 'Blank? False'),
# ('text', 'Relation? False', 'Null? False', 'Blank? False'),
# ('secure_deal_only', 'Relation? False', 'Null? False', 'Blank? True'),
fields = (
'budget',
'currency',
'portfolios',
'secure_deal_only',
'term',
'term_type',
'text',
'secure_deal_only',
'portfolios',
# 'files', # Doesn't work for some fucked up reason
)
widgets = {
@ -205,7 +186,15 @@ class ContractorProjectAnswerForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
answer_as_team = kwargs.pop('answer_as_team', None)
super().__init__(*args, **kwargs)
if answer_as_team:
self.fields['secure_deal_only'].label = 'Работаем только по безопасной сделке'
self.fields['portfolios'].queryset = Portfolio.objects.all()[:2] # Tmp
else:
self.fields['secure_deal_only'].label = 'Работаю только по безопасной сделке'
self.fields['portfolios'].queryset = self.request.user.portfolios
class StageForm(forms.ModelForm):
@ -241,6 +230,7 @@ class ContractorPortfolioTrashForm(forms.Form):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
super().__init__(*args, **kwargs)
self.fields['pk'].queryset = self.request.user.portfolios.all()

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-08-12 12:49
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('projects', '0001_squashed_0015_merge'),
]
operations = [
migrations.RemoveField(
model_name='portfolio',
name='team',
),
]

@ -221,7 +221,6 @@ class Portfolio(models.Model):
location = TreeForeignKey('common.Location', related_name='portfolios', null=True, blank=True)
name = models.CharField(max_length=255)
specialization = TreeForeignKey(Specialization, related_name='portfolios', null=True, blank=True)
team = models.ForeignKey(Team, related_name='portfolios', null=True, blank=True)
term = models.IntegerField(default=0, null=True, blank=True)
term_type = models.CharField(max_length=20, choices=TERMS, default='hour', null=True, blank=True)
user = models.ForeignKey(User, related_name='portfolios', null=True, blank=True)

@ -125,9 +125,17 @@
</a>
<div class="polsF1 pols-new disTab">
<div class="col-lg-3">
<select class="selectpicker">
<option>Бла-бла</option>
</select>
<form action="{% url 'projects:detail' pk=project.pk %}" method="GET" novalidate>
<select name="answer_as_team" class="selectpicker" onchange="$(this).closest('form').submit()">
{% if answer_as_team %}
<option value="">От своего имени</option>
<option value="on" selected>От имени группы</option>
{% else %}
<option value="" selected>От своего имени</option>
<option value="on">От имени группы</option>
{% endif %}
</select>
</form>
</div>
</div>
{% elif request.user.is_customer %}
@ -311,6 +319,7 @@
<form action="{% url 'projects:detail' pk=project.pk %}" method="POST" enctype="multipart/form-data" novalidate>
{% csrf_token %}
<input type="hidden" name="next" value="{% url 'projects:detail' pk=project.pk %}">
<input type="hidden" name="answer_as_team" value="{% if answer_as_team %}on{% endif %}">
<div class="polsF1 disTab">
<div class="col-lg-3">
@ -355,7 +364,7 @@
<p>Портфолио <span style="color: red">{{ form.portfolios.errors.as_text }}</span></p>
<ul>
{% for p in request.user.portfolios.all %}
{% for p in form.portfolios.field.queryset.all %}
<li>
<input
type="checkbox"
@ -390,7 +399,7 @@
<div class="polsF1 disTab searchF1">
<div class="col-lg-9">
{{ form.secure_deal_only }} Работаю только по безопасной сделке
{{ form.secure_deal_only }} {{ form.secure_deal_only.label }}
</div>
</div>

@ -22,7 +22,7 @@ from work_sell.models import Picture
from .forms import (
ContractorPortfolioTrashForm,
ContractorProjectAnswerForm,
ProjectAnswerForm,
CustomerProjectDeleteForm,
CustomerProjectEditForm,
CustomerProjectEditForm,
@ -36,7 +36,7 @@ from .forms import (
class ProjectDetailWithContractorAnswerView(BaseMixin, View):
form_class = ContractorProjectAnswerForm
form_class = ProjectAnswerForm
template_name = 'project_detail.html'
def get(self, request, *args, **kwargs):
@ -69,7 +69,14 @@ class ProjectDetailWithContractorAnswerView(BaseMixin, View):
if got_answer:
context.update({'answer': answer})
else:
form = self.form_class(request=request)
if request.GET.get('answer_as_team') == 'on': # TODO: Check for actual possibility to answer as a team
context.update({'answer_as_team': True})
form = self.form_class(request=request, answer_as_team=True)
else:
form = self.form_class(request=request)
# import code; code.interact(local=dict(globals(), **locals()))
context.update({'form': form})
return render(request, self.template_name, context)
@ -77,32 +84,44 @@ class ProjectDetailWithContractorAnswerView(BaseMixin, View):
def post(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_contractor():
context = self.get_context_data(**kwargs)
form = self.form_class(request.POST, request=request)
if request.POST.get('answer_as_team') == 'on':
form = self.form_class(request.POST, request=request, answer_as_team=True)
else:
form = self.form_class(request.POST, request=request)
project = get_object_or_404(Project, pk=kwargs.get('pk'))
context.update({'project': project})
if form.is_valid():
answer = form.save(commit=False)
answer.project = project
answer.author = request.user
answer.save()
form.save_m2m()
print('Form valid. "form.cleaned_data": ###############')
pprint(form.cleaned_data)
print('################################################')
for file in request.FILES.getlist('new_files'):
if len(file.name) <= 255:
AnswerFile.objects.create(file=file, name=file.name, answer=answer)
# answer = form.save(commit=False)
# answer.project = project
# answer.author = request.user
# answer.save()
# form.save_m2m()
#
# for file in request.FILES.getlist('new_files'):
# if len(file.name) <= 255:
# AnswerFile.objects.create(file=file, name=file.name, answer=answer)
messages.info(request, 'Отклик успешно размещён')
redirect_to = request.POST.get('next')
return redirect(redirect_to)
else:
print('Form invalid. "form.data": #####################')
pprint(form.data)
print('################################################')
if form.errors:
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
context.update({'form': form})
return render(request, self.template_name, context)
else:

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-08-12 07:18
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0007_auto_20160808_1557'),
]
operations = [
migrations.AlterField(
model_name='contractorresumefiles',
name='title',
field=models.CharField(blank=True, max_length=255),
),
migrations.AlterField(
model_name='contractorresumefiles',
name='type',
field=models.CharField(choices=[('diplom', 'Дипломы/Сертификаты'), ('cro', 'Допуск CPO')], default='diplom', max_length=50),
),
]

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-08-12 07:18
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('work_sell', '0002_auto_20160805_1736'),
]
operations = [
migrations.AlterField(
model_name='worksell',
name='created',
field=models.DateTimeField(default=django.utils.timezone.now),
),
]
Loading…
Cancel
Save