#ARC-9 add archive template

remotes/origin/PR-39
Mukhtar 10 years ago
parent af326ed35e
commit b1725217ac
  1. 24
      projects/migrations/0010_auto_20160816_1831.py
  2. 2
      projects/models.py
  3. 2
      projects/urls.py
  4. 17
      projects/views.py
  5. 3
      templates/registration/registration_complete.html
  6. 21
      users/templates/contractor_office_open_projects.html
  7. 98
      users/templates/contractor_office_open_projects_archive.html
  8. 2
      users/templates/partials/contractor_profile_tabs.html
  9. 31
      users/views.py

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-08-16 15:31
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('projects', '0009_project_is_archive'),
]
operations = [
migrations.RemoveField(
model_name='project',
name='is_archive',
),
migrations.AddField(
model_name='answer',
name='is_archive',
field=models.BooleanField(default=False),
),
]

@ -93,7 +93,6 @@ class Project(models.Model):
term_type = models.CharField(max_length=20, choices=TERMS, default='hour') term_type = models.CharField(max_length=20, choices=TERMS, default='hour')
text = models.TextField(blank=True) text = models.TextField(blank=True)
work_type = models.IntegerField(default=1, choices=WORK_TYPES) work_type = models.IntegerField(default=1, choices=WORK_TYPES)
is_archive = models.BooleanField(default=False)
def __str__(self): def __str__(self):
return self.name return self.name
@ -127,6 +126,7 @@ class Answer(models.Model):
secure_deal_only = models.BooleanField(default=False) secure_deal_only = models.BooleanField(default=False)
term = models.IntegerField(default=0) term = models.IntegerField(default=0)
term_type = models.CharField(max_length=10, choices=TERMS, default='hour') term_type = models.CharField(max_length=10, choices=TERMS, default='hour')
is_archive = models.BooleanField(default=False)
content_type = models.ForeignKey(ContentType, limit_choices_to=Q(app_label='users', model='user') | Q(app_label='users', model='team')) content_type = models.ForeignKey(ContentType, limit_choices_to=Q(app_label='users', model='user') | Q(app_label='users', model='team'))
object_id = models.IntegerField() object_id = models.IntegerField()

@ -16,6 +16,7 @@ from .views import (
ProjectComparisonView, ProjectComparisonView,
ProjectDetailWithAnswerView, ProjectDetailWithAnswerView,
ProjectFilterView, ProjectFilterView,
ContractorAnswerArchiveView,
sort_candidates, sort_candidates,
) )
@ -28,6 +29,7 @@ urlpatterns = [
urls.url(r'^create/$', CustomerProjectCreateView.as_view(), name='customer-project-create'), urls.url(r'^create/$', CustomerProjectCreateView.as_view(), name='customer-project-create'),
urls.url(r'^(?P<pk>\d+)/edit/$', CustomerProjectEditView.as_view(), name='customer-project-edit'), urls.url(r'^(?P<pk>\d+)/edit/$', CustomerProjectEditView.as_view(), name='customer-project-edit'),
urls.url(r'^(?P<pk>\d+)/trash/$', CustomerProjectTrashView.as_view(), name='customer-project-trash'), urls.url(r'^(?P<pk>\d+)/trash/$', CustomerProjectTrashView.as_view(), name='customer-project-trash'),
urls.url(r'^answer/move/archive/$', ContractorAnswerArchiveView.as_view(), name='contractor-answer-archive'),
urls.url(r'^portfolio/(?P<pk>\d+)/trash/$', ContractorPortfolioTrashView.as_view(), name='contractor-portfolio-trash'), urls.url(r'^portfolio/(?P<pk>\d+)/trash/$', ContractorPortfolioTrashView.as_view(), name='contractor-portfolio-trash'),
urls.url(r'^(?P<pk>\d+)/restore/$', CustomerProjectRestoreView.as_view(), name='customer-project-restore'), urls.url(r'^(?P<pk>\d+)/restore/$', CustomerProjectRestoreView.as_view(), name='customer-project-restore'),
urls.url(r'^(?P<pk>\d+)/delete/$', CustomerProjectDeleteView.as_view(), name='customer-project-delete'), urls.url(r'^(?P<pk>\d+)/delete/$', CustomerProjectDeleteView.as_view(), name='customer-project-delete'),

@ -192,8 +192,9 @@ class ProjectFilterView(BaseMixin, View):
for k in keywords: for k in keywords:
projects = projects.filter(Q(name__icontains=k) | Q(text__icontains=k)) projects = projects.filter(Q(name__icontains=k) | Q(text__icontains=k))
projects = projects.filter(cro=cro) # projects = projects.filter(cro=cro)
if work_type: if work_type:
projects = projects.filter(work_type=work_type) projects = projects.filter(work_type=work_type)
@ -429,6 +430,18 @@ class CustomerProjectEditView(BaseMixin, View):
return render(request, self.template_name, context) return render(request, self.template_name, context)
class ContractorAnswerArchiveView(View):
def post(self, request, *args, **kwargs):
project_pk = request.POST.get('project_pk')
user_pk = request.POST.get('user_pk')
answer = Answer.objects.filter(project_id=project_pk,object_id=user_pk, content_type__model='user').first()
answer.is_archive = True
answer.save()
redirect_to = request.POST.get('next')
return redirect(redirect_to)
class ContractorPortfolioTrashView(View): class ContractorPortfolioTrashView(View):
form_class = ContractorPortfolioTrashForm form_class = ContractorPortfolioTrashForm

@ -7,6 +7,9 @@
<div class="col-lg-12"> <div class="col-lg-12">
<p class="titleScore">Регистрация прошла успешно</p> <p class="titleScore">Регистрация прошла успешно</p>
<p style="text-align: center;">Вам необходимо активировать этот аккаунт. Перейдите по ссылке в письме,
которое вам отправлено на почту
</p>
</div> </div>
{% include 'partials/footer.html' %} {% include 'partials/footer.html' %}

@ -12,7 +12,7 @@
<div class="col-lg-12"> <div class="col-lg-12">
<p class="titleScore">Личный кабинет</p> <p class="titleScore">Личный кабинет</p>
</div> </div>
{% include 'partials/contractor_profile_tabs.html' with contractor_pk=request.user.pk active='open' %} {% include 'partials/contractor_profile_tabs.html' with contractor_pk=request.user.pk active='open' all_project_count=projects_count %}
<div class="buttonGP disTab"> <div class="buttonGP disTab">
<div class="btn-group valProject2" role="group" aria-label="..."> <div class="btn-group valProject2" role="group" aria-label="...">
<a href="{% url 'users:contractor-office-open-projects' pk=request.user.pk %}" class="btn btn-default">Все</a> <a href="{% url 'users:contractor-office-open-projects' pk=request.user.pk %}" class="btn btn-default">Все</a>
@ -22,11 +22,11 @@
<div class="btn-group valProject2" role="group" aria-label="..."> <div class="btn-group valProject2" role="group" aria-label="...">
<button type="button" class="btn btn-default"> <button type="button" class="btn btn-default">
Открытые проекты Открытые проекты
<span><mark>2</mark> / <span>35</span></span> <span><mark>{{ current_projects_count }}</mark> / <span>{{ projects_count }}</span></span>
</button> </button>
<button type="button" class="btn btn-default"> <button type="button" class="btn btn-default">
Архив Архив
<span><mark></mark><span>7</span></span> <span><mark></mark><span>{{ archive_count }}</span></span>
</button> </button>
</div> </div>
</div> </div>
@ -69,14 +69,23 @@
{{ proj.budget }} <i class="fa fa-rub"></i> {{ proj.budget }} <i class="fa fa-rub"></i>
</p> </p>
<ul> <ul>
{% if proj.cro %}
<li> <li>
Безопасная сделка Безопасная сделка
</li> </li>
{% endif %}
<li> <li>
Отказаться и перемстить <form action="{% url 'projects:contractor-answer-archive' %}" method="POST" novalidate>
в корзину {% csrf_token %}
<input type="hidden" name="next" value="{{ request.path }}">
<input type="hidden" name="project_pk" value="{{ proj.pk }}">
<input type="hidden" name="user_pk" value="{{ request.user.pk }}">
<a href="#" onclick="$(this).closest('form').submit(); return false">Отказаться и переместить в архив</a>
</form>
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>

@ -0,0 +1,98 @@
{% extends 'partials/base.html' %}
{% load staticfiles %}
{% load specializtions_tags %}
{% load thumbnail %}
{% block content %}
{% include 'partials/header.html' %}
<div class="container mainScore" >
<div class="row">
<div class="col-lg-12">
<p class="titleScore">Личный кабинет</p>
</div>
{% include 'partials/contractor_profile_tabs.html' with contractor_pk=request.user.pk active='open' all_project_count=projects_count %}
<div class="buttonGP disTab">
<div class="btn-group valProject2" role="group" aria-label="...">
<a href="{% url 'users:contractor-office-open-projects' pk=request.user.pk %}" class="btn btn-default">Все</a>
<a href="{% url 'users:contractor-office-open-projects' pk=request.user.pk %}?owner=private" class="btn btn-default">Личные</a>
<a href="{% url 'users:contractor-office-open-projects' pk=request.user.pk %}?owner=teams" class="btn btn-default">От именни группы</a>
</div>
<div class="btn-group valProject2" role="group" aria-label="...">
<button type="button" class="btn btn-default">
Открытые проекты
<span><mark>{{ current_projects_count }}</mark> / <span>{{ projects_count }}</span></span>
</button>
<button type="button" class="btn btn-default">
Архив
<span><mark></mark><span>{{ archive_count }}</span></span>
</button>
</div>
</div>
<div class="projectsBlock disTab">
{% for proj in open_projects %}
<div class="projectPro clearfix">
<div class="col-lg-9 leftPro">
<a href="{% url 'projects:detail' proj.pk %}">
<p class="titlePro">
{{ proj }}
</p>
</a>
<ul class="desPro">
<li>
Объект "{{ proj.realty.name }}"
</li>
<li>
<span>0</span> ответ от имени группы
</li>
</ul>
<p class="textPro">
</p>
<ul class="listPro">
<li>
{{ proj.created }}
</li>
<li>
0
</li>
<li>
0
</li>
<li>
{{ proj.customer.username }}
</li>
</ul>
</div>
<div class="col-lg-3 rightPro">
<p class="cenaPro">
{{ proj.budget }} <i class="fa fa-rub"></i>
</p>
<ul>
{% if proj.cro %}
<li>
Безопасная сделка
</li>
{% endif %}
<li>
<form action="{% url 'projects:contractor-answer-archive' %}" method="POST" novalidate>
{% csrf_token %}
<input type="hidden" name="next" value="{{ request.path }}">
<input type="hidden" name="project_pk" value="{{ proj.pk }}">
<input type="hidden" name="user_pk" value="{{ request.user.pk }}">
<a href="#" onclick="$(this).closest('form').submit(); return false">Отказаться и переместить в архив</a>
</form>
</li>
</ul>
</div>
</div>
{% endfor %}
</div>
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}

@ -17,7 +17,7 @@
</span> </span>
<div class="roundsCount"> <div class="roundsCount">
<div class="countR">0</div> <div class="countR">0</div>
<div class="countG">0</div> <div class="countG">{{ all_project_count}}</div>
</div> </div>
</li> </li>
<li role="presentation"> <li role="presentation">

@ -387,6 +387,36 @@ class ContractorOfficeDetailView(DetailView):
class ContractorOfficeOpenProjectsView(BaseMixin,View): class ContractorOfficeOpenProjectsView(BaseMixin,View):
template_name = 'contractor_office_open_projects.html' template_name = 'contractor_office_open_projects.html'
def get(self, request, *args, **kwargs):
context = self.get_context_data(**_.merge({},request.GET, kwargs))
contractor = get_object_or_404(User.contractor_objects,pk=kwargs.get('pk'))
owner = request.GET.get('owner')
# import code; code.interact(local=dict(globals(), **locals()))
if owner and owner == 'private':
all_project_ids = [a.project.pk for a in contractor.contractor_answers.filter(is_archive=False)]
elif owner and owner == 'teams':
all_project_ids = [a.project.pk for a in contractor.team.answers.filter(is_archive=False)]
else:
team_project_ids = [a.project.pk for a in contractor.team.answers.filter(is_archive=False)]
contractor_project_ids = [a.project.pk for a in contractor.contractor_answers.filter(is_archive=False)]
all_project_ids = contractor_project_ids + team_project_ids
open_projects = Project.objects.filter(pk__in=all_project_ids)
archive_contractor_count = contractor.contractor_answers.filter(is_archive=True).count()
archive_team_count = contractor.team.answers.filter(is_archive=True).count()
archive_count = archive_contractor_count + archive_team_count
context.update({
'open_projects': open_projects,
'projects_count': len(open_projects),
'current_projects_count': len(open_projects),
'archive_count': archive_count,
})
return render(request, self.template_name, context)
class ContractorOfficeOpenProjectsArchiveView(BaseMixin,View):
template_name = 'contractor_office_open_projects_archive.html'
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
context = self.get_context_data(**_.merge({},request.GET, kwargs)) context = self.get_context_data(**_.merge({},request.GET, kwargs))
contractor = get_object_or_404(User.contractor_objects,pk=kwargs.get('pk')) contractor = get_object_or_404(User.contractor_objects,pk=kwargs.get('pk'))
@ -404,6 +434,7 @@ class ContractorOfficeOpenProjectsView(BaseMixin,View):
open_projects = Project.objects.filter(pk__in=all_project_ids) open_projects = Project.objects.filter(pk__in=all_project_ids)
context.update({ context.update({
'open_projects': open_projects, 'open_projects': open_projects,
'projects_count': len(open_projects),
}) })
return render(request, self.template_name, context) return render(request, self.template_name, context)

Loading…
Cancel
Save