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.
 
 
 
 
 
 

197 lines
6.9 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/')
class TestProjectView(View):
model = Project
form_class = ProjectForm
template_name = '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 = '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)