Add new project template

remotes/origin/setup
Mukhtar 10 years ago
parent 49224787a8
commit 78861ee107
  1. 31
      projects/forms.py
  2. 28
      projects/migrations/0026_auto_20160610_1204.py
  3. 26
      projects/migrations/0027_auto_20160610_1231.py
  4. 20
      projects/migrations/0028_auto_20160610_1301.py
  5. 14
      projects/models.py
  6. 68
      projects/templates/customer_project_create.html
  7. 4
      projects/urls.py
  8. 4
      projects/views.py

@ -1,33 +1,37 @@
from django import forms from django import forms
from django.forms import ModelForm, HiddenInput, Form, Select from django.forms import ModelForm, HiddenInput, Form, Select
from django.forms.models import inlineformset_factory from django.forms.models import inlineformset_factory
from .models import Project, Portfolio, Answer, Realty, PortfolioPhoto, Stage from mptt.forms import TreeNodeChoiceField
from .models import Project, Portfolio, Answer, Realty, PortfolioPhoto, Stage, Specialization
# RealtyFormSet = inlineformset_factory(Project, Realty) # RealtyFormSet = inlineformset_factory(Project, Realty)
class ProjectForm(ModelForm): class ProjectForm(ModelForm):
specialization = TreeNodeChoiceField(queryset=Specialization.objects.exclude(id=1))
class Meta: class Meta:
model = Project model = Project
fields = ( fields = (
'budget', 'budget',
'budget_by_agreement', 'budget_by_agreement',
'created',
'cro', 'cro',
'currency', 'currency',
'customer',
'name', 'name',
'price_and_term_required', 'price_and_term_required',
'realty', 'deal_type',
'secure_deal',
'specialization',
'term',
'term_type', 'term_type',
'text', 'text',
'work_type', 'work_type',
# TODO: Add "files" 'specialization',
) )
widgets = {
'specialization': Select(attrs={'class':'selectpicker'}),
'currency': Select(attrs={'class':'selectpicker2 valul'}),
'term_type': Select(attrs={'class':'selectpicker'}),
}
class ProjectsForm(Form): class ProjectsForm(Form):
name = forms.CharField(max_length=255) name = forms.CharField(max_length=255)
@ -38,13 +42,20 @@ class RealtyForm(ModelForm):
model = Realty model = Realty
fields = ( fields = (
# 'city', 'country',
'city',
'building_classification', 'building_classification',
'construction_type', 'construction_type',
'country',
'name', 'name',
) )
widgets = {
'construction_type': Select(attrs={'class':'selectpicker'}),
'building_classification': Select(attrs={'class':'selectpicker'}),
'city': Select(attrs={'class':'selectpicker'}),
'country': Select(attrs={'class':'selectpicker'}),
}
class Realty1Form(Form): class Realty1Form(Form):
pass pass

@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-10 09:04
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('projects', '0025_auto_20160609_1916'),
]
operations = [
migrations.AlterModelOptions(
name='projectfile',
options={'verbose_name': 'Файл проекта', 'verbose_name_plural': 'Файлы проектов'},
),
migrations.RemoveField(
model_name='project',
name='secure_deal',
),
migrations.AddField(
model_name='project',
name='deal_type',
field=models.CharField(choices=[('secure_deal', 'Безопасная сделка (с резервированием бюджета) '), ('direct_payment', 'Прямая оплата Исполнителю на его кошелек/счет')], default='secure_deal', max_length=20),
),
]

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-10 09:31
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('projects', '0026_auto_20160610_1204'),
]
operations = [
migrations.AlterField(
model_name='realty',
name='city',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='realties', to='projects.City'),
),
migrations.AlterField(
model_name='realty',
name='country',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='realties', to='projects.Country'),
),
]

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-10 10:01
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('projects', '0027_auto_20160610_1231'),
]
operations = [
migrations.AlterField(
model_name='project',
name='work_type',
field=models.CharField(choices=[('1', 'Проектирование'), ('2', 'Техническое сопровождение')], default='1', max_length=20),
),
]

@ -65,9 +65,9 @@ class City(models.Model):
class Realty(models.Model): class Realty(models.Model):
building_classification = models.ForeignKey(BuildingClassfication, related_name='realties') building_classification = models.ForeignKey(BuildingClassfication, related_name='realties')
city = models.CharField(max_length=50) city = models.ForeignKey(City, related_name='realties')
construction_type = models.ForeignKey(ConstructionType, related_name='realties') construction_type = models.ForeignKey(ConstructionType, related_name='realties')
country = models.CharField(max_length=50) country = models.ForeignKey(Country, related_name='realties')
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
user = models.ForeignKey(User, related_name='realties') user = models.ForeignKey(User, related_name='realties')
@ -85,6 +85,11 @@ class Project(models.Model):
('2', 'Техническое сопровождение') ('2', 'Техническое сопровождение')
) )
DEAL_TYPES = (
('secure_deal', 'Безопасная сделка (с резервированием бюджета) '),
('direct_payment', 'Прямая оплата Исполнителю на его кошелек/счет'),
)
budget = models.DecimalField(max_digits=10, decimal_places=0) budget = models.DecimalField(max_digits=10, decimal_places=0)
budget_by_agreement = models.BooleanField(default=False) budget_by_agreement = models.BooleanField(default=False)
created = models.DateTimeField(default=timezone.now) created = models.DateTimeField(default=timezone.now)
@ -94,12 +99,12 @@ class Project(models.Model):
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
price_and_term_required = models.BooleanField(default=False, blank=True) price_and_term_required = models.BooleanField(default=False, blank=True)
realty = models.ForeignKey(Realty, null=True, related_name='projects') realty = models.ForeignKey(Realty, null=True, related_name='projects')
secure_deal = models.BooleanField(default=False) deal_type = models.CharField(max_length=20, default='secure_deal', choices=DEAL_TYPES)
specialization = models.ForeignKey(Specialization, related_name='projects') specialization = models.ForeignKey(Specialization, related_name='projects')
term = models.IntegerField(default=0) term = models.IntegerField(default=0)
term_type = models.CharField(max_length=20, choices=TERMS, default='hour') term_type = models.CharField(max_length=20, choices=TERMS, default='hour')
text = models.TextField(blank=True) text = models.TextField(blank=True)
work_type = models.IntegerField(default=1, choices=WORK_TYPES) work_type = models.CharField(default='1', max_length=20, choices=WORK_TYPES)
def __str__(self): def __str__(self):
return self.name return self.name
@ -169,7 +174,6 @@ class Stage(models.Model):
verbose_name_plural = 'Этапы' verbose_name_plural = 'Этапы'
class Candidate(models.Model): class Candidate(models.Model):
answer = models.ForeignKey(Answer, related_name='candidates') answer = models.ForeignKey(Answer, related_name='candidates')
project = models.ForeignKey(Project, related_name='candidates') project = models.ForeignKey(Project, related_name='candidates')

@ -69,11 +69,7 @@
</div> </div>
<div class="polsF1 disTab"> <div class="polsF1 disTab">
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> {{ form_project.specialization }}
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker" disabled> <select class="selectpicker" disabled>
@ -94,27 +90,21 @@
</div> </div>
<div class="searchF1 polsF1 polsFF"> <div class="searchF1 polsF1 polsFF">
<div class="col-lg-4"> <div class="col-lg-4">
<input type="text" class="box-sizing surr"> <input type="text" class="box-sizing surr" name="{{ form_project.budget.name }}" />
<select class="selectpicker2 valul"> {{ form_project.currency }}
<option>&#36;</option>
<option>&#36;</option>
<option>&#36;</option>
</select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> {{ form_project.term_type }}
<option>За проект</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</div> </div>
<div class="col-lg-5 dog-new"> <div class="col-lg-5 dog-new">
<label><input type="checkbox" name="dogovor"><span></span></label> <label>
<input type="checkbox" name="{{ form_project.budget_by_agreement.name }}"><span></span></label>
<p>или по договоренности</p> <p>или по договоренности</p>
</div> </div>
</div> </div>
<div class="searchF1 polsF1 polsFF make-new"> <div class="searchF1 polsF1 polsFF make-new">
<label><input type="checkbox" name="dogovor"><span></span></label> <label><input type="checkbox" name="{{ form_project.price_and_term_required.name }}"><span></span></label>
<p>Сделать для исполнителей обязательным для заполнения поля цена и срок</p> <p>Сделать для исполнителей обязательным для заполнения поля цена и срок</p>
</div> </div>
<div class="titleF1 titleF2 disTab"> <div class="titleF1 titleF2 disTab">
@ -122,25 +112,23 @@
</div> </div>
<div class="searchF1 polsF1 polsFF radio-afer"> <div class="searchF1 polsF1 polsFF radio-afer">
<div class="col-lg-6"> <div class="col-lg-6">
<label><input type="radio" name="afer"><span></span></label> <label>
<input type="radio" name="{{ form_project.deal_type.name }}" value="secure_deal"><span></span></label>
<p class="text-afer"> <p class="text-afer">
Безопасная сделка (с резервированием бюджета) Безопасная сделка (с резервированием бюджета)
</p> </p>
<p class="des-afer"> <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.
</p> </p>
</div> </div>
<div class="col-lg-6"> <div class="col-lg-6">
<label><input type="radio" name="afer"><span></span></label> <label><input type="radio" name="{{ form_project.deal_type.name }}" value="direct_payment"><span></span></label>
<p class="text-afer"> <p class="text-afer">
Прямая оплата Исполнителю на его кошелек/счет Прямая оплата Исполнителю на его кошелек/счет
</p> </p>
<p class="des-afer"> <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.
</p> </p>
</div> </div>
</div> </div>
@ -171,21 +159,13 @@
</select> </select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<input type="text" name="{{ form_realty.name.name }}" class="box-sizing surr surr2"> <input type="text" name="form_2-{{ form_realty.name.name }}" class="box-sizing surr surr2">
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker" name="{{ form_realty.building_classification.name }}"> {{ form_realty.building_classification }}
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker" name="{{ form_realty.construction_type.name }}"> {{ form_realty.construction_type }}
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</div> </div>
</div> </div>
<div class="titleF1 disTab"> <div class="titleF1 disTab">
@ -193,21 +173,13 @@
</div> </div>
<div class="polsF1 polsF2 disTab"> <div class="polsF1 polsF2 disTab">
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> {{ form_realty.country }}
<option>Россия</option>
<option>Украина</option>
<option>Белоруссия</option>
</select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> {{ form_realty.city }}
<option>Москва</option>
<option>Санкт-Петербург</option>
<option></option>
</select>
</div> </div>
<div class="col-lg-6 make-new"> <div class="col-lg-6 make-new">
<label><input type="checkbox" name="dogovor"><span></span></label> <label><input type="checkbox" name="{{ form_project.cro.name }}"><span></span></label>
<p>Требуется допуск СРО</p> <p>Требуется допуск СРО</p>
</div> </div>
</div> </div>

@ -1,14 +1,14 @@
from django.conf import urls from django.conf import urls
from django.views.generic import TemplateView from django.views.generic import TemplateView
from .views import ProjectListView, ProjectDetailView, ProjectCreateView, \ from .views import ProjectsView, ProjectDetailView, ProjectCreateView, \
ProjectComparisonView, add_candidate, ChatView, OfferOrderView ProjectComparisonView, add_candidate, ChatView, OfferOrderView
app_name = 'projects' app_name = 'projects'
urlpatterns = [ urlpatterns = [
urls.url(r'^$', ProjectListView.as_view(), name='list'), urls.url(r'^$', ProjectsView.as_view(), name='list'),
urls.url(r'^candidate/add/(?P<answer_id>(\d+))/(?P<project_id>(\d+))/$', add_candidate, name='add-candidate'), urls.url(r'^candidate/add/(?P<answer_id>(\d+))/(?P<project_id>(\d+))/$', add_candidate, name='add-candidate'),
urls.url(r'^candidate/comparison/(?P<pk>\d+)$', ProjectComparisonView.as_view(), name='comparison'), urls.url(r'^candidate/comparison/(?P<pk>\d+)$', ProjectComparisonView.as_view(), name='comparison'),
urls.url(r'^create/$', ProjectCreateView.as_view(), name='project-create'), urls.url(r'^create/$', ProjectCreateView.as_view(), name='project-create'),

@ -12,7 +12,7 @@ from .forms import ProjectForm, PortfolioForm, AnswerForm, RealtyForm
from .mixins import LastAccessMixin from .mixins import LastAccessMixin
class ProjectListView(ListView): class ProjectsView(ListView):
model = Project model = Project
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
@ -73,7 +73,7 @@ class ProjectCreateView(PermissionRequiredMixin, View):
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
form_project = self.form_project(request.POST) form_project = self.form_project(request.POST)
form_realty = self.form_realty(request.POST,prefix='form_2') form_realty = self.form_realty(request.POST, prefix='form_2')
if form_project.is_valid() and form_realty.is_valid(): if form_project.is_valid() and form_realty.is_valid():
return self.form_valid(request, form_project, form_realty) return self.form_valid(request, form_project, form_realty)
return render(request, self.template_name, {'form_project': form_project, 'form_realty': form_realty}) return render(request, self.template_name, {'form_project': form_project, 'form_realty': form_realty})

Loading…
Cancel
Save