#ARC-12 Extended characteristics

remotes/origin/setup
ArturBaybulatov 10 years ago
parent c2db336f74
commit 2e983bc3ca
  1. 7
      common/templatetags/common_tags.py
  2. 47
      projects/forms.py
  3. 21
      projects/migrations/0033_auto_20160621_1057.py
  4. 8
      projects/models.py
  5. 147
      projects/templates/customer_project_create.html
  6. 59
      projects/views.py

@ -15,3 +15,10 @@ def inspect2(context, obj):
return { return {
'obj': pformat(dir(obj)), 'obj': pformat(dir(obj)),
} }
@register.simple_tag
def interact(**kwargs):
import code; code.interact(local=dict(kwargs, **dict(globals(), **locals())))
# import code; code.interact(local=dict(globals(), **locals()))

@ -1,6 +1,5 @@
from django import forms from django import forms
from django.db.models import Q from django.db.models import Q
from django.forms import ModelForm, HiddenInput, Form, Select
from django.forms.models import inlineformset_factory from django.forms.models import inlineformset_factory
from mptt.forms import TreeNodeChoiceField from mptt.forms import TreeNodeChoiceField
@ -11,11 +10,11 @@ from users.models import User
# RealtyFormSet = inlineformset_factory(Project, Realty) # RealtyFormSet = inlineformset_factory(Project, Realty)
class ProjectsForm(Form): class ProjectsForm(forms.Form):
name = forms.CharField(max_length=255) name = forms.CharField(max_length=255)
class CustomerProjectCreateForm(ModelForm): class CustomerProjectCreateForm(forms.ModelForm):
specialization = TreeNodeChoiceField(queryset=Specialization.objects.exclude(id=1)) specialization = TreeNodeChoiceField(queryset=Specialization.objects.exclude(id=1))
class Meta: class Meta:
@ -29,6 +28,7 @@ class CustomerProjectCreateForm(ModelForm):
'deal_type', 'deal_type',
'name', 'name',
'price_and_term_required', 'price_and_term_required',
'realty',
'specialization', 'specialization',
'term_type', 'term_type',
'text', 'text',
@ -36,42 +36,51 @@ class CustomerProjectCreateForm(ModelForm):
) )
widgets = { widgets = {
'specialization': Select(attrs={'class':'selectpicker'}), 'currency': forms.Select(attrs={'class':'selectpicker2 valul'}),
'currency': Select(attrs={'class':'selectpicker2 valul'}), 'realty': forms.Select(attrs={'class':'selectpicker'}),
'term_type': Select(attrs={'class':'selectpicker'}), 'specialization': forms.Select(attrs={'class':'selectpicker'}),
'term_type': forms.Select(attrs={'class':'selectpicker'}),
} }
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request') self.request = kwargs.pop('request')
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.fields['realty'].empty_label = 'Создать новый'
class RealtyForm(ModelForm):
class RealtyForm(forms.ModelForm):
class Meta: class Meta:
model = Realty model = Realty
fields = ( fields = (
'building_classification', 'building_classification',
'construction_type', 'construction_type',
'location',
'name', 'name',
) )
widgets = { widgets = {
'construction_type': Select(attrs={'class':'selectpicker'}), 'construction_type': forms.Select(attrs={'class':'selectpicker'}),
'building_classification': Select(attrs={'class':'selectpicker'}), 'building_classification': forms.Select(attrs={'class':'selectpicker'}),
} }
class Realty1Form(Form): def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
super().__init__(*args, **kwargs)
class Realty1Form(forms.Form):
pass pass
class PortfolioForm(ModelForm): class PortfolioForm(forms.ModelForm):
class Meta: class Meta:
model = Portfolio model = Portfolio
fields = '__all__' fields = '__all__'
class ContractorProjectAnswerForm(ModelForm): class ContractorProjectAnswerForm(forms.ModelForm):
# def __init__(self, *args, **kwargs): # def __init__(self, *args, **kwargs):
# # import code; code.interact(local=dict(globals(), **locals())) # # import code; code.interact(local=dict(globals(), **locals()))
# self.project_id = kwargs.pop('project_id') # self.project_id = kwargs.pop('project_id')
@ -90,12 +99,12 @@ class ContractorProjectAnswerForm(ModelForm):
) )
widgets = { widgets = {
'currency': Select(attrs={'class':'selectpicker'}), 'currency': forms.Select(attrs={'class':'selectpicker'}),
'term_type': Select(attrs={'class':'selectpicker'}), 'term_type': forms.Select(attrs={'class':'selectpicker'}),
} }
class StageForm(ModelForm): class StageForm(forms.ModelForm):
class Meta: class Meta:
model = Stage model = Stage
@ -112,7 +121,7 @@ class StageForm(ModelForm):
PortfolioPhotoFormSet = inlineformset_factory(Portfolio, PortfolioPhoto, fields=('img',)) PortfolioPhotoFormSet = inlineformset_factory(Portfolio, PortfolioPhoto, fields=('img',))
class ProjectEditForm(forms.ModelForm): class CustomerProjectEditForm(forms.ModelForm):
pk = forms.ModelChoiceField(queryset=Project.objects.none()) pk = forms.ModelChoiceField(queryset=Project.objects.none())
class Meta: class Meta:
@ -126,7 +135,7 @@ class ProjectEditForm(forms.ModelForm):
self.fields['pk'].queryset = self.req.user.projects.filter(state='active') self.fields['pk'].queryset = self.req.user.projects.filter(state='active')
class ProjectTrashForm(Form): class CustomerProjectTrashForm(forms.Form):
pk = forms.ModelChoiceField(queryset=Project.objects.none()) pk = forms.ModelChoiceField(queryset=Project.objects.none())
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -136,7 +145,7 @@ class ProjectTrashForm(Form):
self.fields['pk'].queryset = self.req.user.projects.filter(state='active') self.fields['pk'].queryset = self.req.user.projects.filter(state='active')
class ProjectRestoreForm(Form): class CustomerProjectRestoreForm(forms.Form):
pk = forms.ModelChoiceField(queryset=Project.objects.none()) pk = forms.ModelChoiceField(queryset=Project.objects.none())
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -146,7 +155,7 @@ class ProjectRestoreForm(Form):
self.fields['pk'].queryset = self.req.user.projects.filter(state='trashed') self.fields['pk'].queryset = self.req.user.projects.filter(state='trashed')
class ProjectDeleteForm(Form): class CustomerProjectDeleteForm(forms.Form):
pk = forms.ModelChoiceField(queryset=Project.objects.none()) pk = forms.ModelChoiceField(queryset=Project.objects.none())
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-21 07:57
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('projects', '0032_auto_20160615_1610'),
]
operations = [
migrations.AlterField(
model_name='project',
name='realty',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='projects', to='projects.Realty'),
),
]

@ -80,8 +80,8 @@ class Project(models.Model):
currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES) currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES)
customer = models.ForeignKey(User, related_name='projects') customer = models.ForeignKey(User, related_name='projects')
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
price_and_term_required = models.BooleanField(default=False, blank=True) price_and_term_required = models.BooleanField(default=False)
realty = models.ForeignKey(Realty, null=True, related_name='projects') realty = models.ForeignKey(Realty, blank=True, null=True, related_name='projects')
deal_type = models.CharField(max_length=20, default='secure_deal', choices=DEAL_TYPES) deal_type = models.CharField(max_length=20, default='secure_deal', choices=DEAL_TYPES)
specialization = models.ForeignKey(Specialization, related_name='projects') specialization = models.ForeignKey(Specialization, related_name='projects')
term = models.IntegerField(default=0) term = models.IntegerField(default=0)
@ -98,9 +98,7 @@ class Project(models.Model):
verbose_name_plural = 'Проекты' verbose_name_plural = 'Проекты'
def secure_deal(self): def secure_deal(self):
if self.deal_type == 'secure_deal': return self.deal_type == 'secure_deal'
return True
return False
class ProjectFile(models.Model): class ProjectFile(models.Model):

@ -1,5 +1,7 @@
{% extends 'partials/base.html' %} {% extends 'partials/base.html' %}
{% load common_tags %}
{% block content %} {% block content %}
{% include 'partials/header.html' %} {% include 'partials/header.html' %}
@ -9,20 +11,25 @@
<p class="titleScore">Новый заказ</p> <p class="titleScore">Новый заказ</p>
</div> </div>
<form method="post"> <form action="{% url 'projects:customer-project-create' %}" method="POST">
{% csrf_token %} {% csrf_token %}
{{ form.errors }}
{{ form_realty.errors }}
<div class="chatBlock new-rass new-rass2 disTab"> <div class="chatBlock new-rass new-rass2 disTab">
<div class="col-lg-9"> <div class="col-lg-9">
<p class="new-pp new-pp3">Формирование заказа</p> <p class="new-pp new-pp3">Формирование заказа</p>
{% if form.non_field_errors %}
<div class="new-pp3" style="color: red; margin-top: 70px">{{ form.non_field_errors }}</div>
{% endif %}
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Название заказа</p> <p>Название заказа <span style="color: red">{{ form.name.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ form.name.name }}" value="{{ form.name.value }}"> <input type="text" class="box-sizing" name="{{ form.name.name }}" value="{{ form.name.value }}">
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Подробно опишите задание</p> <p>Подробно опишите задание <span style="color: red">{{ form.text.errors.as_text }}</span></p>
<textarea name="{{ form.text.name }}" id="text-new" value="{{ form.text.value }}"></textarea> <textarea name="{{ form.text.name }}" id="text-new">{{ form.text.value }}</textarea>
</div> </div>
</div> </div>
<div class="col-lg-3 wrChat1"> <div class="col-lg-3 wrChat1">
@ -43,29 +50,37 @@
</ul> </ul>
</div> </div>
<p class="type-work">Тип работы:</p>
<p class="type-work">Тип работы <span style="color: red">{{ form.work_type.errors.as_text }}</span></p>
<div class="mail-block type-work-inset"> <div class="mail-block type-work-inset">
{% for id, name in form.work_type.field.choices %}
<div class="inset-mb"> <div class="inset-mb">
<label><input type="radio" value="1" name="{{ form.work_type.name }}"><span></span></label> <label>
<p>Проектирование</p> <input
</div> type="radio"
<div class="inset-mb"> value="{{ id }}"
<label><input type="radio" value="2" name="{{ form.work_type.name }}"><span></span></label> {% if id == form.work_type.value %}checked{% endif %}
<p>Техническое сопровождение</p> name="{{ form.work_type.name }}">
<span></span>
</label>
<p>{{ name }}</p>
</div> </div>
{% endfor %}
</div> </div>
<div class="textAreaBlock2 box-sizing disTab"> <div class="textAreaBlock2 box-sizing disTab">
<a href="javascriptt:void(0)" class="new-link new-lw">+ Добавить раздел</a> <a href="#" class="new-link new-lw">+ Добавить раздел</a>
</div> </div>
</div> </div>
</div> </div>
<div class="col-lg-12 new-filter"> <div class="col-lg-12 new-filter">
<div class="filter clearfix"> <div class="filter clearfix">
<div class="titleF1 disTab"> <div class="titleF1 disTab">
<div class="col-lg-3">Специализация проекта:</div> <div class="col-lg-12">Специализация проекта <span style="color: red">{{ form.specialization.errors.as_text }}</span></div>
<div class="col-lg-3"></div> <!--<div class="col-lg-3"></div>
<div class="col-lg-3"></div>
<div class="col-lg-3"></div> <div class="col-lg-3"></div>
<div class="col-lg-3"></div>-->
</div> </div>
<div class="polsF1 disTab"> <div class="polsF1 disTab">
<div class="col-lg-3"> <div class="col-lg-3">
@ -85,8 +100,8 @@
</div> </div>
</div> </div>
<div class="titleF1 titleF2 disTab"> <div class="titleF1 titleF2 disTab">
<div class="col-lg-4">Бюджет</div> <div class="col-lg-12">Бюджет <span style="color: red">{{ form.budget.errors.as_text }}</span></div>
<div class="col-lg-8"></div> <!--<div class="col-lg-8"></div>-->
</div> </div>
<div class="searchF1 polsF1 polsFF"> <div class="searchF1 polsF1 polsFF">
<div class="col-lg-4"> <div class="col-lg-4">
@ -98,38 +113,78 @@
</div> </div>
<div class="col-lg-5 dog-new"> <div class="col-lg-5 dog-new">
<label> <label>
<input
type="checkbox"
{% if form.budget_by_agreement.value %}checked{% endif %}
name="{{ form.budget_by_agreement.name }}">
<span></span>
</label>
<input type="checkbox" name="{{ form.budget_by_agreement.name }}"><span></span></label>
<p>или по договоренности</p> <p>или по договоренности</p>
</div> </div>
</div> </div>
<div class="searchF1 polsF1 polsFF make-new"> <div class="searchF1 polsF1 polsFF make-new">
<label><input type="checkbox" name="{{ form.price_and_term_required.name }}"><span></span></label> <label>
<input
type="checkbox"
{% if form.price_and_term_required.value %}checked{% endif %}
name="{{ form.price_and_term_required.name }}">
<span></span>
</label>
<p>Сделать для исполнителей обязательным для заполнения поля цена и срок</p> <p>Сделать для исполнителей обязательным для заполнения поля цена и срок</p>
</div> </div>
<div class="titleF1 titleF2 disTab"> <div class="titleF1 titleF2 disTab">
<div class="col-lg-12">Способ оплаты</div> <div class="col-lg-12">Способ оплаты <span style="color: red">{{ form.deal_type.errors.as_text }}</span></div>
</div> </div>
<div class="searchF1 polsF1 polsFF radio-afer"> <div class="searchF1 polsF1 polsFF radio-afer">
<div class="col-lg-6"> <div class="col-lg-6">
<label><input type="radio" name="{{ form.deal_type.name }}" value="secure_deal"><span></span></label> <label>
<input
type="radio"
name="{{ form.deal_type.name }}"
{% if form.deal_type.value == 'secure_deal' %}checked{% endif %}
value="secure_deal">
<span></span>
</label>
<p class="text-afer"> <p class="text-afer">
Безопасная сделка (с резервированием бюджета) Безопасная сделка (с резервированием бюджета)
</p> </p>
<p class="des-afer"> <p class="des-afer">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro vel suscipit eaque quidem voluptate aperiam enim aut libero, excepturi architecto maxime, placeat maiores, odio itaque, ex consectetur dignissimos dicta officia Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro vel suscipit eaque quidem voluptate aperiam enim aut libero, excepturi architecto maxime, placeat maiores, odio itaque, ex consectetur dignissimos dicta officia
</p> </p>
</div> </div>
<div class="col-lg-6"> <div class="col-lg-6">
<label><input type="radio" name="{{ form.deal_type.name }}" value="direct_payment"><span></span></label> <label>
<input
type="radio"
name="{{ form.deal_type.name }}"
{% if form.deal_type.value == 'direct_payment' %}checked{% endif %}
value="direct_payment">
<span></span>
</label>
<p class="text-afer"> <p class="text-afer">
Прямая оплата Исполнителю на его кошелек/счет Прямая оплата Исполнителю на его кошелек/счет
</p> </p>
<p class="des-afer"> <p class="des-afer">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro vel suscipit eaque quidem voluptate aperiam enim aut libero, excepturi architecto maxime, placeat maiores, odio itaque, ex consectetur dignissimos dicta officia Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro vel suscipit eaque quidem voluptate aperiam enim aut libero, excepturi architecto maxime, placeat maiores, odio itaque, ex consectetur dignissimos dicta officia
</p> </p>
</div> </div>
</div> </div>
<div class="resSearchF1"> <div class="resSearchF1">
<div class="col-lg-3"> <div class="col-lg-3">
<p class="titleResF1">Расширенный поиск</p> <p class="titleResF1">Расширенный поиск</p>
@ -143,39 +198,41 @@
</div> </div>
<div class="slideRes disTab activeSlide"> <div class="slideRes disTab activeSlide">
<div class="titleF1 disTab"> <div class="titleF1 disTab">
<div class="col-lg-3">Выбор объекта:</div> <div class="col-lg-3">Выбор объекта<br><span style="color: red">{{ form.realty.errors.as_text }}</span></div>
<div class="col-lg-3">Наименование:</div> <div class="col-lg-3">Наименование<br><span style="color: red">{{ realty_form.name.errors.as_text }}</span></div>
<div class="col-lg-3">Классификация здания:</div> <div class="col-lg-3">Классификация здания<br><span style="color: red">{{ realty_form.building_classification.errors.as_text }}</span></div>
<div class="col-lg-3">Вид строительства:</div> <div class="col-lg-3">Вид строительства<br><span style="color: red">{{ realty_form.construction_type.errors.as_text }}</span></div>
</div> </div>
<div class="polsF1 polsF2 disTab"> <div class="polsF1 polsF2 disTab">
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> {# <select class="selectpicker">#}
{% for realty in realty_list %} {# {% for realty in realty_list %}#}
<option>{{ realty.name }}</option> {# <option>{{ realty.name }}</option>#}
{% endfor %} {# {% endfor %}#}
</select> {# </select>#}
{{ form.realty }}
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<input type="text" name="form_2-{{ form_realty.name.name }}" class="box-sizing surr surr2" value="{{ form_realty.name.value }}"> <input type="text" name="form_2-{{ realty_form.name.name }}" class="box-sizing surr surr2" value="{{ realty_form.name.value }}">
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
{{ form_realty.building_classification }} {{ realty_form.building_classification }}
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
{{ form_realty.construction_type }} {{ realty_form.construction_type }}
</div> </div>
</div> </div>
<div class="titleF1 disTab"> <div class="titleF1 disTab">
<div class="col-lg-12">Местоположение:</div> <div class="col-lg-12">Местоположение:</div>
</div> </div>
<div class="polsF1 polsF2 disTab"> <div class="polsF1 polsF2 disTab">
<div class="col-lg-3"> {# <div class="col-lg-3">#}
{{ form_realty.country }} {# {{ realty_form.country }}#}
</div> {# </div>#}
<div class="col-lg-3"> {# <div class="col-lg-3">#}
{{ form_realty.city }} {# {{ realty_form.city }}#}
</div> {# </div>#}
<div class="col-lg-6 make-new"> <div class="col-lg-6 make-new">
<label><input type="checkbox" name="{{ form.cro.name }}"><span></span></label> <label><input type="checkbox" name="{{ form.cro.name }}"><span></span></label>
<p>Требуется допуск СРО</p> <p>Требуется допуск СРО</p>
@ -187,6 +244,12 @@
<a href="javascript:void(0)">Сохранить</a> <a href="javascript:void(0)">Сохранить</a>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</form> </form>

@ -17,10 +17,10 @@ from .forms import (
ContractorProjectAnswerForm, ContractorProjectAnswerForm,
CustomerProjectCreateForm, CustomerProjectCreateForm,
PortfolioForm, PortfolioForm,
ProjectDeleteForm, CustomerProjectDeleteForm,
ProjectEditForm, CustomerProjectEditForm,
ProjectRestoreForm, CustomerProjectRestoreForm,
ProjectTrashForm, CustomerProjectTrashForm,
RealtyForm, RealtyForm,
) )
@ -63,14 +63,16 @@ from .forms import (
class CustomerProjectCreateView(BaseMixin, View): class CustomerProjectCreateView(BaseMixin, View):
form_class = CustomerProjectCreateForm form_class = CustomerProjectCreateForm
realty_form = RealtyForm
template_name = 'customer_project_create.html' template_name = 'customer_project_create.html'
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer(): if request.user.is_authenticated() and request.user.is_customer():
form = self.form_class(request=request) form = self.form_class(request=request)
realty_form = self.realty_form(request=request)
context = self.get_context_data(**_.merge({}, request.GET, kwargs)) context = self.get_context_data(**_.merge({}, request.GET, kwargs))
context.update({'form': form}) context.update({'form': form, 'realty_form': realty_form})
return render(request, self.template_name, context) return render(request, self.template_name, context)
else: else:
@ -78,7 +80,8 @@ class CustomerProjectCreateView(BaseMixin, View):
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer(): if request.user.is_authenticated() and request.user.is_customer():
form = self.form_class(_.merge({}, request.POST, kwargs), request=request) form = self.form_class(request.POST, request=request)
realty_form = None
if form.is_valid(): if form.is_valid():
project = form.save(commit=False) project = form.save(commit=False)
@ -86,14 +89,46 @@ class CustomerProjectCreateView(BaseMixin, View):
project.save() project.save()
form.save_m2m() form.save_m2m()
realty = form.cleaned_data.get('realty')
if realty:
realty_form = self.realty_form(request.POST, instance=realty, request=request) # Modify an existing realty
if realty_form.is_valid():
realty_form.save()
messages.info(request, 'Проект успешно создан') messages.info(request, 'Проект успешно создан')
redirect_to = reverse('projects:detail', kwargs={'pk': project.pk}) redirect_to = reverse('projects:detail', kwargs={'pk': project.pk})
return redirect(redirect_to) return redirect(redirect_to)
else: else:
realty_form = self.realty_form(request.POST, request=request) # Create a new realty
if realty_form.is_valid():
realty = realty_form.save(commit=False)
realty.user = request.user
realty.save()
realty_form.save_m2m()
messages.info(request, 'Проект успешно создан')
redirect_to = reverse('projects:detail', kwargs={'pk': project.pk})
return redirect(redirect_to)
context = self.get_context_data(**kwargs) context = self.get_context_data(**kwargs)
context.update({'form': form})
messages.info(request, 'Произошла ошибка: <pre>{msg}</pre>'.format(msg=pformat(form.errors))) if form.errors:
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
if realty_form and realty_form.errors:
messages.info(request, (
'<p>Произошла ошибка (realty_form)</p>'
'<pre>{realty_form}</pre>'
).format(realty_form=pformat(realty_form.errors)))
context.update({'form': form, 'realty_form': realty_form})
return render(request, self.template_name, context) return render(request, self.template_name, context)
else: else:
return HttpResponseForbidden('403 Forbidden') return HttpResponseForbidden('403 Forbidden')
@ -126,7 +161,7 @@ class ProjectView(BaseMixin, View):
class CustomerProjectEditView(BaseMixin, View): class CustomerProjectEditView(BaseMixin, View):
form_class = ProjectEditForm form_class = CustomerProjectEditForm
template_name = 'customer_project_edit_test.html' # 'customer_project_edit.html' template_name = 'customer_project_edit_test.html' # 'customer_project_edit.html'
def get(self, req, *args, **kwargs): def get(self, req, *args, **kwargs):
@ -185,7 +220,7 @@ class ContractorProjectAnswerView(BaseMixin, View):
class CustomerProjectTrashView(View): class CustomerProjectTrashView(View):
form_class = ProjectTrashForm form_class = CustomerProjectTrashForm
def post(self, req, *args, **kwargs): def post(self, req, *args, **kwargs):
if req.user.is_authenticated(): if req.user.is_authenticated():
@ -207,7 +242,7 @@ class CustomerProjectTrashView(View):
class CustomerProjectRestoreView(View): class CustomerProjectRestoreView(View):
form_class = ProjectRestoreForm form_class = CustomerProjectRestoreForm
def post(self, req, *args, **kwargs): def post(self, req, *args, **kwargs):
if req.user.is_authenticated(): if req.user.is_authenticated():
@ -229,7 +264,7 @@ class CustomerProjectRestoreView(View):
class CustomerProjectDeleteView(View): class CustomerProjectDeleteView(View):
form_class = ProjectDeleteForm form_class = CustomerProjectDeleteForm
def post(self, req, *args, **kwargs): def post(self, req, *args, **kwargs):
if req.user.is_authenticated(): if req.user.is_authenticated():

Loading…
Cancel
Save