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)