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 = '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 = '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 = 'customer_project_create.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 = '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 = '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]))