You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
5.5 KiB
156 lines
5.5 KiB
from django.shortcuts import render, get_object_or_404
|
|
from django.http import HttpResponseForbidden, HttpResponseRedirect, HttpResponse
|
|
from django.core.urlresolvers import reverse
|
|
from django.contrib.auth.mixins import PermissionRequiredMixin
|
|
from django.views.generic import ListView, DetailView, CreateView, View, TemplateView
|
|
from django.views.generic.edit import FormMixin
|
|
|
|
|
|
from users.models import User
|
|
from .models import Project, Portfolio, Candidate, Answer, Realty
|
|
from .forms import ProjectForm, PortfolioForm, AnswerForm, RealtyForm
|
|
from .mixins import LastAccessMixin
|
|
|
|
|
|
class ProjectListView(ListView):
|
|
model = Project
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
|
|
return context
|
|
|
|
|
|
class ProjectDetailView(LastAccessMixin, FormMixin, View):
|
|
model = Project
|
|
form_class = AnswerForm
|
|
template_name = 'contractor_project_detail.html'
|
|
|
|
def get_success_url(self):
|
|
return reverse('projects:detail', kwargs={'pk': self.object.pk})
|
|
|
|
def get_form_kwargs(self, **kwargs):
|
|
kwargs = super().get_form_kwargs(**kwargs)
|
|
kwargs.update({'project_id': self.object.pk})
|
|
return kwargs
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
if request.user.is_customer():
|
|
self.template_name = 'customer_project_detail.html'
|
|
project = get_object_or_404(Project, pk=kwargs.get('pk'))
|
|
return render(request, self.template_name, {'project': project, 'form': self.form_class})
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
if not request.user.is_authenticated():
|
|
return HttpResponseForbidden()
|
|
form = self.form_class(request.POST)
|
|
project = get_object_or_404(Project, pk=kwargs.get('pk'))
|
|
if form.is_valid():
|
|
return self.form_valid(request, form, project)
|
|
return render(request, self.template_name, {'project': project, 'form': self.form_class})
|
|
|
|
def form_valid(self, request, form, project):
|
|
answer = form.save(commit=False)
|
|
answer.user = request.user
|
|
answer.project = project
|
|
answer.save()
|
|
return HttpResponseRedirect(reverse('projects:detail', kwargs={'pk': project.id}))
|
|
|
|
|
|
class ProjectCreateView(PermissionRequiredMixin, View):
|
|
permission_required = ('projects.add_project',)
|
|
form_realty = RealtyForm
|
|
form_project = ProjectForm
|
|
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.user = request.user
|
|
project.realty = realty
|
|
project.save()
|
|
|
|
return HttpResponseRedirect('/projects/')
|
|
|
|
def form_invalid(self, form, second_form):
|
|
pass
|
|
|
|
|
|
class TestView(View):
|
|
template_name = 'test_form.html'
|
|
form_class = RealtyForm
|
|
form_second = ProjectForm
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
form = self.form_class()
|
|
second_form = self.form_second(prefix='form_2')
|
|
return render(request,self.template_name, {'form': form, 'second_form': second_form})
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
form = self.form_class(request.POST)
|
|
second_form = self.form_second(request.POST,prefix='form_2')
|
|
if form.is_valid() and second_form.is_valid():
|
|
return self.form_valid(request, form, second_form)
|
|
return render(request, self.template_name, {'form': form, 'second_form': second_form})
|
|
|
|
def form_valid(self, request, form, second_form):
|
|
realty = form.save(commit=False)
|
|
realty.user = request.user
|
|
realty.save()
|
|
project = second_form.save(commit=False)
|
|
project.user = request.user
|
|
project.realty = realty
|
|
project.save()
|
|
return HttpResponseRedirect('/projects/')
|
|
|
|
def form_invalid(self, form, second_form):
|
|
pass
|
|
|
|
|
|
|
|
class ProjectComparisonView(DetailView):
|
|
model = Project
|
|
template_name = 'comparison.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data()
|
|
return context
|
|
|
|
|
|
def add_candidate(request, answer_id, project_id):
|
|
answer = Answer.objects.get(pk=answer_id)
|
|
project = Project.objects.get(pk=project_id)
|
|
candidate = Candidate.objects.create(answer=answer, project=project)
|
|
return HttpResponseRedirect(reverse('projects:detail',args=[project_id]))
|
|
|
|
|
|
class ChatView(View):
|
|
template_name = 'chat.html'
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
return render(request, self.template_name)
|
|
|
|
|
|
class OfferOrderView(View):
|
|
template_name = 'chattest.html'
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
return render(request, self.template_name)
|
|
|