@ -8,22 +8,95 @@ from django.views.generic.base import ContextMixin
from pprint import pprint , pformat
from pprint import pprint , pformat
import pydash as _
import pydash as _
from . mixins import LastAccessMixin
from . models import Project , Portfolio , Candidate , Answer , Realty , Order
from . models import Project , Portfolio , Candidate , Answer , Realty , Order
from archilance . mixins import BaseMixin
from archilance . mixins import BaseMixin
from users . models import User
from users . models import User
from . forms import (
from . forms import (
AnswerForm ,
ContractorProjectAnswerForm ,
CustomerProjectCreateForm ,
PortfolioForm ,
PortfolioForm ,
ProjectDeleteForm ,
ProjectDeleteForm ,
ProjectEditForm ,
ProjectEditForm ,
ProjectForm ,
ProjectRestoreForm ,
ProjectRestoreForm ,
ProjectTrashForm ,
ProjectTrashForm ,
RealtyForm ,
RealtyForm ,
)
)
from . mixins import LastAccessMixin
# 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
template_name = ' customer_project_create.html '
def get ( self , request , * args , * * kwargs ) :
if request . user . is_authenticated ( ) and request . user . is_customer ( ) :
form = self . form_class ( request = request )
context = self . get_context_data ( * * _ . merge ( { } , request . GET , kwargs ) )
context . update ( { ' form ' : form } )
return render ( request , self . template_name , context )
else :
return HttpResponseForbidden ( ' 403 Forbidden ' )
def post ( self , request , * args , * * kwargs ) :
if request . user . is_authenticated ( ) and request . user . is_customer ( ) :
form = self . form_class ( _ . merge ( { } , request . POST , kwargs ) , request = request )
if form . is_valid ( ) :
project = form . save ( commit = False )
project . customer = request . user
project . save ( )
form . save_m2m ( )
messages . info ( request , ' Проект успешно создан ' )
redirect_to = reverse ( ' projects:detail ' , kwargs = { ' pk ' : project . pk } )
return redirect ( redirect_to )
else :
context = self . get_context_data ( * * kwargs )
context . update ( { ' form ' : form } )
messages . info ( request , ' Произошла ошибка: <pre> {msg} </pre> ' . format ( msg = pformat ( form . errors ) ) )
return render ( request , self . template_name , context )
else :
return HttpResponseForbidden ( ' 403 Forbidden ' )
class ProjectsView ( ListView ) :
class ProjectsView ( ListView ) :
@ -31,19 +104,66 @@ class ProjectsView(ListView):
template_name = ' project_list.html '
template_name = ' project_list.html '
class ProjectView ( LastAccessMixin , View ) :
class ProjectView ( BaseMixin , View ) :
model = Project
template_name = ' project_detail.html '
form_class = AnswerForm
customer_template_name = ' customer_project_detail.html '
template_name = ' contractor_project_detail.html '
def get_success_url ( self ) :
return reverse ( ' projects:detail ' , kwargs = { ' pk ' : self . object . pk } )
def get ( self , request , * args , * * kwargs ) :
def get ( self , request , * args , * * kwargs ) :
if request . user . is_customer ( ) :
if request . user . is_authenticated ( ) and request . user . is_customer ( ) :
self . template_name = ' customer_project_detail.html '
project = get_object_or_404 ( request . user . projects , pk = kwargs . get ( ' pk ' ) )
project = get_object_or_404 ( Project , pk = kwargs . get ( ' pk ' ) )
return render ( request , self . template_name , { ' project ' : project , ' form ' : self . form_class } )
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 )
class CustomerProjectEditView ( BaseMixin , View ) :
form_class = ProjectEditForm
template_name = ' customer_project_edit_test.html ' # 'customer_project_edit.html'
def get ( self , req , * args , * * kwargs ) :
if req . user . is_authenticated ( ) :
project = get_object_or_404 ( req . user . projects , pk = kwargs . get ( ' pk ' ) )
form = self . form_class ( instance = project , req = req )
context = self . get_context_data ( * * _ . merge ( { } , req . GET , kwargs ) )
context . update ( { ' form ' : form } )
return render ( req , self . template_name , context )
else :
return HttpResponseForbidden ( ' 403 Forbidden ' )
def post ( self , req , * args , * * kwargs ) :
if req . user . is_authenticated ( ) :
project = get_object_or_404 ( req . user . projects , pk = kwargs . get ( ' pk ' ) )
form = self . form_class ( _ . merge ( { } , req . POST , kwargs ) , req = req , instance = project )
if form . is_valid ( ) :
form . save ( )
messages . info ( req , ' Проект успешно отредактирован ' )
redirect_to = req . POST . get ( ' next ' )
return redirect ( redirect_to )
else :
context = self . get_context_data ( * * kwargs )
context . update ( { ' form ' : form } )
messages . info ( req , ' Произошла ошибка: <pre> {msg} </pre> ' . format ( msg = pformat ( form . errors ) ) )
return render ( req , self . template_name , context )
else :
return HttpResponseForbidden ( ' 403 Forbidden ' )
class ContractorProjectAnswerView ( BaseMixin , View ) :
form_class = ContractorProjectAnswerForm
def post ( self , request , * args , * * kwargs ) :
def post ( self , request , * args , * * kwargs ) :
if not request . user . is_authenticated ( ) :
if not request . user . is_authenticated ( ) :
@ -64,49 +184,7 @@ class ProjectView(LastAccessMixin, View):
return HttpResponseRedirect ( reverse ( ' projects:detail ' , kwargs = { ' pk ' : project . pk } ) )
return HttpResponseRedirect ( reverse ( ' projects:detail ' , kwargs = { ' pk ' : project . pk } ) )
class ProjectTestView ( DetailView ) :
class CustomerProjectTrashView ( View ) :
model = Project
template_name = ' test.html '
class ProjectCreateView ( PermissionRequiredMixin , View ) :
permission_required = ( ' projects.add_project ' , )
form_realty = RealtyForm
form_project = ProjectForm
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 ProjectTrashView ( View ) :
form_class = ProjectTrashForm
form_class = ProjectTrashForm
def post ( self , req , * args , * * kwargs ) :
def post ( self , req , * args , * * kwargs ) :
@ -128,7 +206,7 @@ class ProjectTrashView(View):
return redirect ( redirect_to )
return redirect ( redirect_to )
class ProjectRestoreView ( View ) :
class Customer ProjectRestoreView( View ) :
form_class = ProjectRestoreForm
form_class = ProjectRestoreForm
def post ( self , req , * args , * * kwargs ) :
def post ( self , req , * args , * * kwargs ) :
@ -150,7 +228,7 @@ class ProjectRestoreView(View):
return redirect ( redirect_to )
return redirect ( redirect_to )
class ProjectDeleteView ( View ) :
class Customer ProjectDeleteView( View ) :
form_class = ProjectDeleteForm
form_class = ProjectDeleteForm
def post ( self , req , * args , * * kwargs ) :
def post ( self , req , * args , * * kwargs ) :
@ -172,43 +250,6 @@ class ProjectDeleteView(View):
return redirect ( redirect_to )
return redirect ( redirect_to )
class ProjectEditView ( BaseMixin , View ) :
form_class = ProjectEditForm
template_name = ' project_edit_test.html ' # 'project_edit.html'
def get ( self , req , * args , * * kwargs ) :
if req . user . is_authenticated ( ) :
project = get_object_or_404 ( req . user . projects , pk = kwargs . get ( ' pk ' ) )
form = self . form_class ( instance = project , req = req )
context = self . get_context_data ( * * kwargs )
context . update ( { ' form ' : form } )
return render ( req , self . template_name , context )
else :
return HttpResponseForbidden ( ' 403 Forbidden ' )
def post ( self , req , * args , * * kwargs ) :
if req . user . is_authenticated ( ) :
project = get_object_or_404 ( req . user . projects , pk = kwargs . get ( ' pk ' ) )
form = self . form_class ( _ . merge ( { } , req . POST , kwargs ) , req = req , instance = project )
if form . is_valid ( ) :
form . save ( )
messages . info ( req , ' Проект успешно отредактирован ' )
redirect_to = req . POST . get ( ' next ' )
return redirect ( redirect_to )
else :
context = self . get_context_data ( * * kwargs )
context . update ( { ' form ' : form } )
messages . info ( req , ' Произошла ошибка: <pre> {msg} </pre> ' . format ( msg = pformat ( form . errors ) ) )
return render ( req , self . template_name , context )
else :
return HttpResponseForbidden ( ' 403 Forbidden ' )
class ProjectComparisonView ( DetailView ) :
class ProjectComparisonView ( DetailView ) :
model = Project
model = Project
template_name = ' comparison.html '
template_name = ' comparison.html '