remotes/origin/setup
ArturBaybulatov 10 years ago
parent 2e983bc3ca
commit 6020d4982c
  1. 11
      api/urls.py
  2. 13
      api/views.py
  3. 2
      common/filters.py
  4. 1
      common/models.py
  5. 20
      common/serializers.py
  6. 51
      projects/filters.py
  7. 20
      projects/migrations/0034_auto_20160622_1200.py
  8. 6
      projects/models.py
  9. 61
      projects/serializers.py
  10. 2
      projects/templates/customer_project_create.html
  11. 120
      projects/views.py
  12. 2
      specializations/filters.py
  13. 22
      specializations/serializers.py
  14. 14
      users/filters.py
  15. 26
      users/serializers.py

@ -1,13 +1,20 @@
from rest_framework import routers from rest_framework import routers
from .views import ProjectViewSet, SpecializationViewSet, UserViewSet, LocationViewSet from .views import (
LocationViewSet,
ProjectViewSet,
RealtyViewSet,
SpecializationViewSet,
UserViewSet,
)
router = routers.DefaultRouter() router = routers.DefaultRouter()
router.register(r'locations', LocationViewSet)
router.register(r'projects', ProjectViewSet) router.register(r'projects', ProjectViewSet)
router.register(r'realties', RealtyViewSet)
router.register(r'specializations', SpecializationViewSet) router.register(r'specializations', SpecializationViewSet)
router.register(r'users', UserViewSet) router.register(r'users', UserViewSet)
router.register(r'location', LocationViewSet)
urlpatterns = router.urls urlpatterns = router.urls

@ -1,8 +1,8 @@
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet
from projects.models import Project from projects.models import Project, Realty
from projects.serializers import ProjectSerializer from projects.serializers import ProjectSerializer, RealtySerializer
from projects.filters import ProjectFilterSet from projects.filters import ProjectFilterSet, RealtyFilterSet
from specializations.models import Specialization from specializations.models import Specialization
from specializations.serializers import SpecializationSerializer from specializations.serializers import SpecializationSerializer
@ -16,12 +16,19 @@ from common.models import Location
from common.serializers import LocationSerializer from common.serializers import LocationSerializer
from common.filters import LocationFilterSet from common.filters import LocationFilterSet
class ProjectViewSet(ModelViewSet): class ProjectViewSet(ModelViewSet):
queryset = Project.objects.all() queryset = Project.objects.all()
serializer_class = ProjectSerializer serializer_class = ProjectSerializer
filter_class = ProjectFilterSet filter_class = ProjectFilterSet
class RealtyViewSet(ModelViewSet):
queryset = Realty.objects.all()
serializer_class = RealtySerializer
filter_class = RealtyFilterSet
class SpecializationViewSet(ModelViewSet): class SpecializationViewSet(ModelViewSet):
queryset = Specialization.objects.all() queryset = Specialization.objects.all()
serializer_class = SpecializationSerializer serializer_class = SpecializationSerializer

@ -3,8 +3,8 @@ from .models import Location
class LocationFilterSet(FilterSet): class LocationFilterSet(FilterSet):
id = AllLookupsFilter()
children = RelatedFilter('common.filters.LocationFilterSet') children = RelatedFilter('common.filters.LocationFilterSet')
id = AllLookupsFilter()
level = AllLookupsFilter() level = AllLookupsFilter()
lft = AllLookupsFilter() lft = AllLookupsFilter()
name = AllLookupsFilter() name = AllLookupsFilter()

@ -1,6 +1,7 @@
from django.db import models from django.db import models
from mptt.models import TreeForeignKey, MPTTModel from mptt.models import TreeForeignKey, MPTTModel
class Location(MPTTModel): class Location(MPTTModel):
TYPES = ( TYPES = (
('_root', 'Корень'), ('_root', 'Корень'),

@ -3,7 +3,27 @@ from rest_framework.serializers import ModelSerializer
from .models import Location from .models import Location
class NestedLocationSerializer(ModelSerializer):
class Meta:
model = Location
fields = (
'id',
'name',
'children',
'parent',
'type',
'lft',
'rght',
'level',
'tree_id',
)
class LocationSerializer(ModelSerializer): class LocationSerializer(ModelSerializer):
children = NestedLocationSerializer(many=True)
parent = NestedLocationSerializer()
class Meta: class Meta:
model = Location model = Location

@ -1,12 +1,55 @@
from rest_framework_filters import FilterSet, RelatedFilter, AllLookupsFilter from rest_framework_filters import FilterSet, RelatedFilter, AllLookupsFilter
from .models import Project
from .models import Project, Realty, BuildingClassfication, ConstructionType
class BuildingClassficationFilterSet(FilterSet):
id = AllLookupsFilter()
name = AllLookupsFilter()
class Meta:
model = BuildingClassfication
class ConstructionTypeFilterSet(FilterSet):
id = AllLookupsFilter()
name = AllLookupsFilter()
class Meta:
model = ConstructionType
class ProjectFilterSet(FilterSet): class ProjectFilterSet(FilterSet):
budget = AllLookupsFilter()
budget_by_agreement = AllLookupsFilter()
created = AllLookupsFilter()
cro = AllLookupsFilter()
currency = AllLookupsFilter()
deal_type = AllLookupsFilter()
name = AllLookupsFilter() name = AllLookupsFilter()
price = AllLookupsFilter() price_and_term_required = AllLookupsFilter()
state = AllLookupsFilter()
term = AllLookupsFilter()
term_type = AllLookupsFilter()
text = AllLookupsFilter() text = AllLookupsFilter()
# user = RelatedFilter('users.filters.UserFilterSet') work_type = AllLookupsFilter()
# specialization = RelatedFilter('specializations.filters.SpecializationFilterSet')
customer = RelatedFilter('users.filters.UserFilterSet')
realty = RelatedFilter('projects.filters.RealtyFilterSet')
specialization = RelatedFilter('specializations.filters.SpecializationFilterSet')
class Meta: class Meta:
model = Project model = Project
class RealtyFilterSet(FilterSet):
id = AllLookupsFilter()
name = AllLookupsFilter()
building_classification = RelatedFilter('projects.filters.BuildingClassficationFilterSet')
construction_type = RelatedFilter('projects.filters.ConstructionTypeFilterSet')
location = RelatedFilter('common.filters.LocationFilterSet')
user = RelatedFilter('users.filters.UserFilterSet')
class Meta:
model = Realty

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

@ -58,8 +58,8 @@ class Realty(models.Model):
class Project(models.Model): class Project(models.Model):
WORK_TYPES = ( WORK_TYPES = (
('1', 'Проектирование'), (1, 'Проектирование'),
('2', 'Техническое сопровождение') (2, 'Техническое сопровождение')
) )
DEAL_TYPES = ( DEAL_TYPES = (
@ -87,7 +87,7 @@ class Project(models.Model):
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.CharField(default='1', max_length=20, choices=WORK_TYPES) work_type = models.IntegerField(default=1, choices=WORK_TYPES)
state = models.CharField(default='active', max_length=20, choices=STATES) state = models.CharField(default='active', max_length=20, choices=STATES)
def __str__(self): def __str__(self):

@ -1,21 +1,74 @@
from rest_framework.serializers import ModelSerializer from rest_framework.serializers import ModelSerializer
from .models import Project from .models import Project, Realty, BuildingClassfication, ConstructionType
from common.serializers import LocationSerializer
from specializations.serializers import SpecializationSerializer from specializations.serializers import SpecializationSerializer
from users.serializers import UserSerializer from users.serializers import UserSerializer
class BuildingClassficationSerializer(ModelSerializer):
class Meta:
model = BuildingClassfication
fields = (
'id',
'name',
)
class ConstructionTypeSerializer(ModelSerializer):
class Meta:
model = ConstructionType
fields = (
'id',
'name',
)
class RealtySerializer(ModelSerializer):
building_classification = BuildingClassficationSerializer()
construction_type = ConstructionTypeSerializer()
location = LocationSerializer()
user = UserSerializer()
class Meta:
model = Realty
fields = (
'building_classification',
'construction_type',
'id',
'location',
'name',
'user',
)
class ProjectSerializer(ModelSerializer): class ProjectSerializer(ModelSerializer):
customer = UserSerializer()
specialization = SpecializationSerializer() specialization = SpecializationSerializer()
user = UserSerializer() realty = RealtySerializer()
class Meta: class Meta:
model = Project model = Project
fields = ( fields = (
'budget',
'budget_by_agreement',
'created',
'cro',
'currency',
'customer',
'deal_type',
'id', 'id',
'name', 'name',
'price', 'price_and_term_required',
'realty',
'specialization', 'specialization',
'state',
'term',
'term_type',
'text', 'text',
'user', 'work_type',
) )

@ -214,7 +214,7 @@
{{ form.realty }} {{ form.realty }}
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<input type="text" name="form_2-{{ realty_form.name.name }}" class="box-sizing surr surr2" value="{{ realty_form.name.value }}"> <input type="text" name="{{ realty_form.name.name }}" class="box-sizing surr surr2" value="{{ realty_form.name.value }}">
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
{{ realty_form.building_classification }} {{ realty_form.building_classification }}

@ -25,42 +25,6 @@ from .forms import (
) )
# class CustomerProjectCreateView(PermissionRequiredMixin, View):
# permission_required = ('projects.add_project',)
# form_realty = RealtyForm
# form_project = CustomerProjectCreateForm
# raise_exception = True
# permission_denied_message = 'Вы не можете выполнить это действие'
# template_name = 'customer_project_create.html'
#
# def get(self, request, *args, **kwargs):
# form_project = self.form_project()
# form_realty = self.form_realty(prefix='form_2')
# realty_list = Realty.objects.all()
# return render(request, self.template_name, {'form_project': form_project,
# 'form_realty': form_realty,
# 'realty_list': realty_list})
#
# def post(self, request, *args, **kwargs):
# form_project = self.form_project(request.POST)
# 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})
#
#
# def form_valid(self, request, form_project, form_realty):
# realty = form_realty.save(commit=False)
# realty.user = request.user
# realty.save()
# project = form_project.save(commit=False)
# project.customer = request.user
# project.realty = realty
# project.save()
#
# return HttpResponseRedirect('/projects/')
class CustomerProjectCreateView(BaseMixin, View): class CustomerProjectCreateView(BaseMixin, View):
form_class = CustomerProjectCreateForm form_class = CustomerProjectCreateForm
realty_form = RealtyForm realty_form = RealtyForm
@ -81,55 +45,48 @@ class CustomerProjectCreateView(BaseMixin, View):
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer(): if request.user.is_authenticated() and request.user.is_customer():
form = self.form_class(request.POST, request=request) form = self.form_class(request.POST, request=request)
realty_form = None
if form.is_valid(): form.is_valid()
realty = form.cleaned_data.get('realty')
if realty:
realty_form = self.realty_form(request.POST, instance=realty, request=request)
else:
realty_form = self.realty_form(request.POST, request=request)
if form.is_valid() and realty_form.is_valid():
project = form.save(commit=False) project = form.save(commit=False)
project.customer = request.user project.customer = request.user
project.save() project.save()
form.save_m2m() form.save_m2m()
realty = form.cleaned_data.get('realty')
if realty: if realty:
realty_form = self.realty_form(request.POST, instance=realty, request=request) # Modify an existing realty realty_form.save()
if realty_form.is_valid():
realty_form.save()
messages.info(request, 'Проект успешно создан')
redirect_to = reverse('projects:detail', kwargs={'pk': project.pk})
return redirect(redirect_to)
else: else:
realty_form = self.realty_form(request.POST, request=request) # Create a new realty realty = realty_form.save(commit=False)
realty.user = request.user
if realty_form.is_valid(): realty.save()
realty = realty_form.save(commit=False) realty_form.save_m2m()
realty.user = request.user
realty.save()
realty_form.save_m2m()
messages.info(request, 'Проект успешно создан')
redirect_to = reverse('projects:detail', kwargs={'pk': project.pk})
return redirect(redirect_to)
context = self.get_context_data(**kwargs)
if form.errors:
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
messages.info(request, 'Проект успешно создан')
redirect_to = reverse('projects:detail', kwargs={'pk': project.pk})
return redirect(redirect_to)
else:
if form.errors:
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
if realty_form and realty_form.errors:
messages.info(request, (
'<p>Произошла ошибка (realty_form)</p>'
'<pre>{realty_form}</pre>'
).format(realty_form=pformat(realty_form.errors)))
if realty_form and realty_form.errors: context = self.get_context_data(**kwargs)
messages.info(request, ( context.update({'form': form, 'realty_form': realty_form})
'<p>Произошла ошибка (realty_form)</p>' return render(request, self.template_name, context)
'<pre>{realty_form}</pre>'
).format(realty_form=pformat(realty_form.errors)))
context.update({'form': form, 'realty_form': realty_form})
return render(request, self.template_name, context)
else: else:
return HttpResponseForbidden('403 Forbidden') return HttpResponseForbidden('403 Forbidden')
@ -144,19 +101,14 @@ class ProjectView(BaseMixin, View):
customer_template_name = 'customer_project_detail.html' customer_template_name = 'customer_project_detail.html'
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer(): project = get_object_or_404(Project, pk=kwargs.get('pk'))
project = get_object_or_404(request.user.projects, pk=kwargs.get('pk'))
context = self.get_context_data(**_.merge({}, request.GET, kwargs)) context = self.get_context_data(**_.merge({}, request.GET, kwargs))
context.update({'project': project}) context.update({'project': project})
if request.user.is_authenticated() and request.user.is_customer():
return render(request, self.customer_template_name, context) return render(request, self.customer_template_name, context)
else: else:
project = get_object_or_404(Project, pk=kwargs.get('pk'))
context = self.get_context_data(**_.merge({}, request.GET, kwargs))
context.update({'project': project})
return render(request, self.template_name, context) return render(request, self.template_name, context)

@ -2,8 +2,8 @@ from rest_framework_filters import FilterSet, RelatedFilter, AllLookupsFilter
from .models import Specialization from .models import Specialization
class SpecializationFilterSet(FilterSet): class SpecializationFilterSet(FilterSet):
id = AllLookupsFilter()
children = RelatedFilter('specializations.filters.SpecializationFilterSet') children = RelatedFilter('specializations.filters.SpecializationFilterSet')
id = AllLookupsFilter()
level = AllLookupsFilter() level = AllLookupsFilter()
lft = AllLookupsFilter() lft = AllLookupsFilter()
name = AllLookupsFilter() name = AllLookupsFilter()

@ -3,13 +3,33 @@ from rest_framework.serializers import ModelSerializer
from .models import Specialization from .models import Specialization
class SpecializationSerializer(ModelSerializer): class NestedSpecializationSerializer(ModelSerializer):
class Meta: class Meta:
model = Specialization model = Specialization
fields = ( fields = (
'children',
'id', 'id',
'level',
'lft',
'name',
'parent',
'projects',
'rght',
'tree_id',
)
class SpecializationSerializer(ModelSerializer):
children = NestedSpecializationSerializer(many=True)
parent = NestedSpecializationSerializer()
class Meta:
model = Specialization
fields = (
'children', 'children',
'id',
'level', 'level',
'lft', 'lft',
'name', 'name',

@ -2,13 +2,13 @@ from rest_framework_filters import FilterSet, RelatedFilter, AllLookupsFilter
from .models import User from .models import User
class UserFilterSet(FilterSet): class UserFilterSet(FilterSet):
id = AllLookupsFilter() # id = AllLookupsFilter()
email = AllLookupsFilter() # email = AllLookupsFilter()
first_name = AllLookupsFilter() # first_name = AllLookupsFilter()
is_active = AllLookupsFilter() # is_active = AllLookupsFilter()
is_admin = AllLookupsFilter() # is_admin = AllLookupsFilter()
last_name = AllLookupsFilter() # last_name = AllLookupsFilter()
projects = RelatedFilter('projects.filters.ProjectFilterSet') # projects = RelatedFilter('projects.filters.ProjectFilterSet')
class Meta: class Meta:
model = User model = User

@ -9,19 +9,31 @@ class UserSerializer(ModelSerializer):
model = User model = User
fields = ( fields = (
'id', 'avatar',
'contractor_financial_info',
'contractor_specializations',
'contractor_status',
'created',
'cro',
'date_of_birth',
'email', 'email',
'first_name', 'first_name',
'gender',
'id',
'is_active', 'is_active',
'is_admin',
'last_name', 'last_name',
'projects', 'last_time_visit',
'location',
'nickname',
'patronym',
'skype',
'website',
) )
read_only_fields = ( # read_only_fields = (
'is_active', # 'is_active',
'is_admin', # 'is_admin',
) # )
# def create(self, validated_data): # def create(self, validated_data):
# return User.objects.create(**validated_data) # return User.objects.create(**validated_data)

Loading…
Cancel
Save