from django.shortcuts import render, get_object_or_404, redirect from django.contrib import messages from django.contrib.auth.models import Group from django.views.generic import ListView, DetailView, View, UpdateView, CreateView from django.views.generic.base import TemplateView from django.core.urlresolvers import reverse from archilance.mixins import BaseMixin from common.utils import get_or_none from specializations.models import Specialization from work_sell.forms import WorkSellForm from .models import User, ContractorFinancialInfo from .mixins import CheckForUserMixin from .forms import UserEditForm, ContractorFinancicalInfoForm class UserListView(ListView): model = User template_name = 'users_list.html' context_object_name = 'users' class ContractorListView(ListView): model = User template_name = 'contractor_list.html' context_object_name = 'contractor' class ContractorProfileDetailView(DetailView): model = User worksell_form_class = WorkSellForm template_name = 'contractor_profile.html' context_object_name = 'contractor' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['worksell_form'] = self.worksell_form_class return context class ContractorOfficeDetailView(DetailView): model = User template_name = 'contractor_office.html' context_object_name = 'contractor' class CustomerProfileOpenProjectsView(BaseMixin, DetailView): model = User template_name = 'customer_profile_open_projects.html' context_object_name = 'customer' def get_context_data(self, **kwargs): c = super().get_context_data(**kwargs) c['projects'] = self.object.projects.filter(state='active') return c class CustomerProfileTrashedProjectsView(BaseMixin, DetailView): model = User template_name = 'customer_profile_trashed_projects.html' context_object_name = 'customer' def get_context_data(self, **kwargs): c = super().get_context_data(**kwargs) c['projects'] = self.object.projects.filter(state='trashed') return c class CustomerProfileCurrentProjectsView(BaseMixin, DetailView): model = User template_name = 'customer_profile_current_projects.html' context_object_name = 'customer' class CustomerProfileReviewsView(BaseMixin, DetailView): model = User template_name = 'customer_profile_reviews.html' context_object_name = 'customer' class CustomerProfileEditView(CheckForUserMixin, View): form_class = UserEditForm template_name = 'customer_profile_edit.html' def get(self, request, *args, **kwargs): instance = get_object_or_404(User, pk=request.user.pk) form = self.form_class(instance=instance) nodes = Specialization.objects.all() return render(request,self.template_name, {'form': form , 'nodes': nodes}) def post(self, request, *args, **kwargs): instance = request.user form = self.form_class(request.POST, request.FILES, instance=instance) if form.is_valid(): # import code; code.interact(local=dict(globals(), **locals())) form.save() messages.info(request, 'Отправили post запрос') return redirect(reverse('users:customer-profile-open-projects', kwargs={'pk': request.user.pk})) return render(request, self.template_name, {'form': form}) class ContractorProfileEditView(CheckForUserMixin, View): form_class = UserEditForm template_name = 'contractor_profile_edit.html' def get(self, request, *args, **kwargs): instance = get_object_or_404(User, pk=request.user.pk) form = self.form_class(instance=instance) root = get_or_none(Specialization,name='_root') nodes = root.get_descendants('lft') return render(request,self.template_name, {'form': form , 'nodes': nodes}) def post(self, request, *args, **kwargs): instance = request.user form = self.form_class(request.POST, request.FILES, instance=instance) if form.is_valid(): # import code; code.interact(local=dict(globals(), **locals())) instance = form.save(commit=False) instance.save() messages.info(request, 'Данные успешно отредактированы') return redirect(reverse('users:contractor-edit', kwargs={'pk': request.user.pk})) return render(request, self.template_name, {'form': form}) class ContractorFinancialInfoEdit(CheckForUserMixin, View): template_name = 'contractor_financical_info_edit.html' form_class = ContractorFinancicalInfoForm def get(self, request, *args, **kwargs): instance = request.user.contractor_financial_info # import code; code.interact(local=dict(globals(), **locals())) form = self.form_class(instance=instance) return render(request, self.template_name, {'form': form}) def post(self, request, *args, **kwargs): instance = request.user.contractor_financial_info form = self.form_class(request.POST, request.FILES, instance=instance) if form.is_valid(): financical_instance = form.save() request.user.contractor_financial_info = financical_instance request.user.save() messages.info(request, 'Данные успешно отредактированы') return redirect(reverse('users:contractor-financical', kwargs={'pk': request.user.pk})) return render(request, self.template_name,{'form': form})