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.forms import ModelForm, HiddenInput, Form, Select
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)
class ProjectForm(ModelForm):
specialization = TreeNodeChoiceField(queryset=Specialization.objects.exclude(id=1))
class Meta:
model = Project
fields = (
'budget',
'budget_by_agreement',
'created',
'cro',
'currency',
'customer',
'name',
'price_and_term_required',
'realty',
'secure_deal',
'specialization',
'term',
'deal_type',
'term_type',
'text',
'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):
name = forms.CharField(max_length=255)
@ -38,13 +42,20 @@ class RealtyForm(ModelForm):
model = Realty
fields = (
# 'city',
'country',
'city',
'building_classification',
'construction_type',
'country',
'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):
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):
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')
country = models.CharField(max_length=50)
country = models.ForeignKey(Country, related_name='realties')
name = models.CharField(max_length=255)
user = models.ForeignKey(User, related_name='realties')
@ -84,6 +84,11 @@ class Project(models.Model):
('1', 'Проектирование'),
('2', 'Техническое сопровождение')
)
DEAL_TYPES = (
('secure_deal', 'Безопасная сделка (с резервированием бюджета) '),
('direct_payment', 'Прямая оплата Исполнителю на его кошелек/счет'),
)
budget = models.DecimalField(max_digits=10, decimal_places=0)
budget_by_agreement = models.BooleanField(default=False)
@ -94,12 +99,12 @@ class Project(models.Model):
name = models.CharField(max_length=255)
price_and_term_required = models.BooleanField(default=False, blank=True)
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')
term = models.IntegerField(default=0)
term_type = models.CharField(max_length=20, choices=TERMS, default='hour')
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):
return self.name
@ -169,7 +174,6 @@ class Stage(models.Model):
verbose_name_plural = 'Этапы'
class Candidate(models.Model):
answer = models.ForeignKey(Answer, related_name='candidates')
project = models.ForeignKey(Project, related_name='candidates')

@ -69,11 +69,7 @@
</div>
<div class="polsF1 disTab">
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
{{ form_project.specialization }}
</div>
<div class="col-lg-3">
<select class="selectpicker" disabled>
@ -94,27 +90,21 @@
</div>
<div class="searchF1 polsF1 polsFF">
<div class="col-lg-4">
<input type="text" class="box-sizing surr">
<select class="selectpicker2 valul">
<option>&#36;</option>
<option>&#36;</option>
<option>&#36;</option>
</select>
<input type="text" class="box-sizing surr" name="{{ form_project.budget.name }}" />
{{ form_project.currency }}
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>За проект</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
{{ form_project.term_type }}
</div>
<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>
</div>
</div>
<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>
</div>
<div class="titleF1 titleF2 disTab">
@ -122,25 +112,23 @@
</div>
<div class="searchF1 polsF1 polsFF radio-afer">
<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>
<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>
</div>
<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>
<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>
</div>
</div>
@ -171,21 +159,13 @@
</select>
</div>
<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 class="col-lg-3">
<select class="selectpicker" name="{{ form_realty.building_classification.name }}">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
{{ form_realty.building_classification }}
</div>
<div class="col-lg-3">
<select class="selectpicker" name="{{ form_realty.construction_type.name }}">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
{{ form_realty.construction_type }}
</div>
</div>
<div class="titleF1 disTab">
@ -193,21 +173,13 @@
</div>
<div class="polsF1 polsF2 disTab">
<div class="col-lg-3">
<select class="selectpicker">
<option>Россия</option>
<option>Украина</option>
<option>Белоруссия</option>
</select>
{{ form_realty.country }}
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Москва</option>
<option>Санкт-Петербург</option>
<option></option>
</select>
{{ form_realty.city }}
</div>
<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>
</div>
</div>

@ -1,14 +1,14 @@
from django.conf import urls
from django.views.generic import TemplateView
from .views import ProjectListView, ProjectDetailView, ProjectCreateView, \
from .views import ProjectsView, ProjectDetailView, ProjectCreateView, \
ProjectComparisonView, add_candidate, ChatView, OfferOrderView
app_name = 'projects'
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/comparison/(?P<pk>\d+)$', ProjectComparisonView.as_view(), name='comparison'),
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
class ProjectListView(ListView):
class ProjectsView(ListView):
model = Project
def get_context_data(self, **kwargs):
@ -73,7 +73,7 @@ class ProjectCreateView(PermissionRequiredMixin, View):
def post(self, request, *args, **kwargs):
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():
return self.form_valid(request, form_project, form_realty)
return render(request, self.template_name, {'form_project': form_project, 'form_realty': form_realty})

Loading…
Cancel
Save