From 32e601f818522f3f421da10e0a891d983a0f2a63 Mon Sep 17 00:00:00 2001 From: ArturBaybulatov Date: Fri, 12 Aug 2016 16:03:40 +0300 Subject: [PATCH] #ARC-14 --- .../commands/generate_portfolios.py | 5 +-- projects/forms.py | 36 ++++++--------- .../migrations/0002_remove_portfolio_team.py | 19 ++++++++ projects/models.py | 1 - projects/templates/project_detail.html | 19 +++++--- projects/views.py | 45 +++++++++++++------ users/migrations/0008_auto_20160812_1018.py | 25 +++++++++++ .../migrations/0003_auto_20160812_1018.py | 21 +++++++++ 8 files changed, 125 insertions(+), 46 deletions(-) create mode 100644 projects/migrations/0002_remove_portfolio_team.py create mode 100644 users/migrations/0008_auto_20160812_1018.py create mode 100644 work_sell/migrations/0003_auto_20160812_1018.py diff --git a/archilance/management/commands/generate_portfolios.py b/archilance/management/commands/generate_portfolios.py index 0cf8efa..d33b3bf 100644 --- a/archilance/management/commands/generate_portfolios.py +++ b/archilance/management/commands/generate_portfolios.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() diff --git a/projects/forms.py b/projects/forms.py index 2f2bfb0..cfcfed0 100644 --- a/projects/forms.py +++ b/projects/forms.py @@ -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() diff --git a/projects/migrations/0002_remove_portfolio_team.py b/projects/migrations/0002_remove_portfolio_team.py new file mode 100644 index 0000000..0a6b353 --- /dev/null +++ b/projects/migrations/0002_remove_portfolio_team.py @@ -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', + ), + ] diff --git a/projects/models.py b/projects/models.py index dd83ce5..8600475 100644 --- a/projects/models.py +++ b/projects/models.py @@ -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) diff --git a/projects/templates/project_detail.html b/projects/templates/project_detail.html index 7651f06..cb431a2 100644 --- a/projects/templates/project_detail.html +++ b/projects/templates/project_detail.html @@ -125,9 +125,17 @@
- +
+ +
{% elif request.user.is_customer %} @@ -311,6 +319,7 @@
{% csrf_token %} +
@@ -355,7 +364,7 @@

Портфолио {{ form.portfolios.errors.as_text }}

    - {% for p in request.user.portfolios.all %} + {% for p in form.portfolios.field.queryset.all %}
  • - {{ form.secure_deal_only }} Работаю только по безопасной сделке + {{ form.secure_deal_only }} {{ form.secure_deal_only.label }}
diff --git a/projects/views.py b/projects/views.py index b4b6758..dba295b 100644 --- a/projects/views.py +++ b/projects/views.py @@ -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, ( '

Произошла ошибка (form)

' '
{form}
' ).format(form=pformat(form.errors))) - + context.update({'form': form}) return render(request, self.template_name, context) else: diff --git a/users/migrations/0008_auto_20160812_1018.py b/users/migrations/0008_auto_20160812_1018.py new file mode 100644 index 0000000..8f2467b --- /dev/null +++ b/users/migrations/0008_auto_20160812_1018.py @@ -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), + ), + ] diff --git a/work_sell/migrations/0003_auto_20160812_1018.py b/work_sell/migrations/0003_auto_20160812_1018.py new file mode 100644 index 0000000..1eec17b --- /dev/null +++ b/work_sell/migrations/0003_auto_20160812_1018.py @@ -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), + ), + ]