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.
195 lines
6.6 KiB
195 lines
6.6 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
|
|
from .forms import ProjectForm, PortfolioForm, AnswerForm, RealtyForm
|
|
from .utils 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 = 'projects/contractor_project_detail.html'
|
|
|
|
def get_success_url(self):
|
|
return reverse('projects:detail', kwargs={'pk': self.object.pk})
|
|
|
|
# def get_context_data(self, **kwargs):
|
|
# context = super().get_context_data(**kwargs)
|
|
# context['form'] = self.get_form()
|
|
# return context
|
|
|
|
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 = 'projects/customer_project_detail.html'
|
|
project = get_object_or_404(Project, pk=kwargs.get('pk'))
|
|
return render(request,self.template_name,{'project': project})
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
if not request.user.is_authenticated():
|
|
return HttpResponseForbidden()
|
|
|
|
self.object = self.get_object()
|
|
form = self.get_form()
|
|
if form.is_valid():
|
|
return self.form_valid(form)
|
|
else:
|
|
return self.form_invalid(form)
|
|
|
|
def form_valid(self, form):
|
|
answer = form.instance
|
|
answer.user = self.request.user
|
|
answer.save()
|
|
return super().form_valid(form)
|
|
|
|
|
|
|
|
class PortfolioCreateView(PermissionRequiredMixin, CreateView):
|
|
model = Portfolio
|
|
form_class = PortfolioForm
|
|
permission_required = ('projects.add_portfolio',)
|
|
success_url = '/projects/'
|
|
|
|
class ProjectCreateView(PermissionRequiredMixin, View):
|
|
permission_required = ('projects.add_project',)
|
|
project_form = ProjectForm
|
|
realty_form = RealtyForm
|
|
template_name = 'projects/project_form.html'
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
project_form = self.project_form()
|
|
realty_form = self.realty_form(prefix='realty_form')
|
|
return render(request, self.template_name, {'project_form': project_form , 'realty_form': realty_form})
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
project_form = self.project_form(request.POST)
|
|
realty_form = self.realty_form(request.POST, prefix='realty_form')
|
|
if project_form.is_valid() and realty_form.is_valid():
|
|
return self.form_valid(request, project_form, realty_form)
|
|
return render(request, self.template_name, {'project_form': project_form , 'realty_form': realty_form})
|
|
|
|
def form_valid(self, request, project_form, realty_form):
|
|
realty = realty_form.save(commit=False)
|
|
realty.user = request.user
|
|
realty.save()
|
|
project = project_form.save(commit=False)
|
|
project.user = request.user
|
|
project.realty = realty
|
|
project.save()
|
|
return HttpResponseRedirect('/projects/')
|
|
|
|
|
|
|
|
class TestView(View):
|
|
template_name = 'projects/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 TestProjectView(View):
|
|
model = Project
|
|
form_class = ProjectForm
|
|
template_name = 'projects/test.html'
|
|
success_url = '/projects/'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context['realty_form'] = RealtyForm(prefix='form_2')
|
|
return context
|
|
|
|
# def get(self, request, *args, **kwargs):
|
|
# self.object = None
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
self.object = None
|
|
form_class = self.get_form_class()
|
|
form = self.get_form(form_class)
|
|
realty_form = RealtyForm(self.request.POST)
|
|
# import code; code.interact(local=dict(globals(), **locals()))
|
|
if form.is_valid():
|
|
return self.form_valid(form, realty_form)
|
|
else:
|
|
return self.form_invalid(form, realty_form)
|
|
|
|
|
|
def form_valid(self, form, realty_form):
|
|
status = 'form_valid'
|
|
|
|
realty = realty_form.instance
|
|
realty.user = self.request.user
|
|
realty.save()
|
|
project = form.instance
|
|
project.user = self.request.user
|
|
project.realty = realty
|
|
project.save()
|
|
# import code; code.interact(local=dict(globals(), **locals()))
|
|
|
|
def form_invalid(self, form, realty_form):
|
|
status = 'form_invalid'
|
|
return self.render_to_response(
|
|
self.get_context_data(form=form,
|
|
realty_form=realty_form))
|
|
|
|
|
|
|
|
class ProjectComparisonView(DetailView):
|
|
model = Project
|
|
template_name = 'projects/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]))
|
|
|