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. 124
      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 .views import ProjectViewSet, SpecializationViewSet, UserViewSet, LocationViewSet
from .views import (
LocationViewSet,
ProjectViewSet,
RealtyViewSet,
SpecializationViewSet,
UserViewSet,
)
router = routers.DefaultRouter()
router.register(r'locations', LocationViewSet)
router.register(r'projects', ProjectViewSet)
router.register(r'realties', RealtyViewSet)
router.register(r'specializations', SpecializationViewSet)
router.register(r'users', UserViewSet)
router.register(r'location', LocationViewSet)
urlpatterns = router.urls

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

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

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

@ -3,7 +3,27 @@ from rest_framework.serializers import ModelSerializer
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):
children = NestedLocationSerializer(many=True)
parent = NestedLocationSerializer()
class Meta:
model = Location

@ -1,12 +1,55 @@
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):
budget = AllLookupsFilter()
budget_by_agreement = AllLookupsFilter()
created = AllLookupsFilter()
cro = AllLookupsFilter()
currency = AllLookupsFilter()
deal_type = AllLookupsFilter()
name = AllLookupsFilter()
price = AllLookupsFilter()
price_and_term_required = AllLookupsFilter()
state = AllLookupsFilter()
term = AllLookupsFilter()
term_type = AllLookupsFilter()
text = AllLookupsFilter()
# user = RelatedFilter('users.filters.UserFilterSet')
# specialization = RelatedFilter('specializations.filters.SpecializationFilterSet')
work_type = AllLookupsFilter()
customer = RelatedFilter('users.filters.UserFilterSet')
realty = RelatedFilter('projects.filters.RealtyFilterSet')
specialization = RelatedFilter('specializations.filters.SpecializationFilterSet')
class Meta:
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):
WORK_TYPES = (
('1', 'Проектирование'),
('2', 'Техническое сопровождение')
(1, 'Проектирование'),
(2, 'Техническое сопровождение')
)
DEAL_TYPES = (
@ -87,7 +87,7 @@ class Project(models.Model):
term = models.IntegerField(default=0)
term_type = models.CharField(max_length=20, choices=TERMS, default='hour')
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)
def __str__(self):

@ -1,21 +1,74 @@
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 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):
customer = UserSerializer()
specialization = SpecializationSerializer()
user = UserSerializer()
realty = RealtySerializer()
class Meta:
model = Project
fields = (
'budget',
'budget_by_agreement',
'created',
'cro',
'currency',
'customer',
'deal_type',
'id',
'name',
'price',
'price_and_term_required',
'realty',
'specialization',
'state',
'term',
'term_type',
'text',
'user',
'work_type',
)

@ -214,7 +214,7 @@
{{ form.realty }}
</div>
<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 class="col-lg-3">
{{ 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):
form_class = CustomerProjectCreateForm
realty_form = RealtyForm
@ -81,55 +45,48 @@ class CustomerProjectCreateView(BaseMixin, View):
def post(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer():
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.customer = request.user
project.save()
form.save_m2m()
realty = form.cleaned_data.get('realty')
if realty:
realty_form = self.realty_form(request.POST, instance=realty, request=request) # Modify an existing realty
if realty_form.is_valid():
realty_form.save()
messages.info(request, 'Проект успешно создан')
redirect_to = reverse('projects:detail', kwargs={'pk': project.pk})
return redirect(redirect_to)
realty_form.save()
else:
realty_form = self.realty_form(request.POST, request=request) # Create a new realty
if realty_form.is_valid():
realty = realty_form.save(commit=False)
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)))
realty = realty_form.save(commit=False)
realty.user = request.user
realty.save()
realty_form.save_m2m()
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)))
context.update({'form': form, 'realty_form': realty_form})
return render(request, self.template_name, context)
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)))
context = self.get_context_data(**kwargs)
context.update({'form': form, 'realty_form': realty_form})
return render(request, self.template_name, context)
else:
return HttpResponseForbidden('403 Forbidden')
@ -144,19 +101,14 @@ class ProjectView(BaseMixin, View):
customer_template_name = 'customer_project_detail.html'
def get(self, request, *args, **kwargs):
project = get_object_or_404(Project, pk=kwargs.get('pk'))
context = self.get_context_data(**_.merge({}, request.GET, kwargs))
context.update({'project': project})
if request.user.is_authenticated() and request.user.is_customer():
project = get_object_or_404(request.user.projects, pk=kwargs.get('pk'))
context = self.get_context_data(**_.merge({}, request.GET, kwargs))
context.update({'project': project})
return render(request, self.customer_template_name, context)
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)

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

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

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

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

Loading…
Cancel
Save