#ARC-9 (1~, 2, 3, 4)

remotes/origin/PR-39
ArturBaybulatov 9 years ago
parent aa75fad214
commit 4313d4d25f
  1. 35
      projects/migrations/0030_auto_20160912_1305.py
  2. 2
      templates/partials/footer.html
  3. 2
      templates/partials/header.html
  4. 8
      users/templates/contractor_office.html
  5. 6
      users/templates/partials/contractor_profile_tabs.html
  6. 6
      users/urls.py
  7. 88
      users/views.py
  8. 20
      work_sell/migrations/0013_auto_20160912_1305.py

@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-12 10:05
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('projects', '0029_auto_20160908_1159'),
]
operations = [
migrations.AlterField(
model_name='answer',
name='term_type',
field=models.CharField(blank=True, choices=[('day', 'день'), ('hour', 'час'), ('month', 'месяц'), ('project', 'проект')], max_length=10, null=True),
),
migrations.AlterField(
model_name='portfolio',
name='term_type',
field=models.CharField(blank=True, choices=[('day', 'день'), ('hour', 'час'), ('month', 'месяц'), ('project', 'проект')], default='hour', max_length=20, null=True),
),
migrations.AlterField(
model_name='project',
name='term_type',
field=models.CharField(choices=[('day', 'день'), ('hour', 'час'), ('month', 'месяц'), ('project', 'проект')], default='hour', max_length=20),
),
migrations.AlterField(
model_name='stage',
name='term_type',
field=models.CharField(choices=[('day', 'день'), ('hour', 'час'), ('month', 'месяц'), ('project', 'проект')], default='hour', max_length=10),
),
]

@ -38,7 +38,7 @@
</li>
{% else %}
<li>
<a href="{% url 'users:contractor-office' pk=request.user.pk %}">Мой офис</a>
<a href="{% url 'users:contractor-office' %}">Мой офис</a>
</li>
{% endif %}
{% if request.user.is_staff %}

@ -27,7 +27,7 @@
{% if request.user.is_contractor %}
<li class="officeList icon_tml">
<a href="{% url 'users:contractor-office' pk=request.user.pk %}">Мой офис</a>
<a href="{% url 'users:contractor-office' %}">Мой офис</a>
<span></span>
</li>
{% endif %}

@ -30,6 +30,14 @@
{% endif %}
</div>
<div class="btn-group valProject2 val-pro3" role="group">
{% for team in contractor.teams.all %}
<a href="{% url 'users:team-profile' pk=team.pk %}" class="btn btn-default">
{{ team.name }}
</a>
{% endfor %}
</div>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">

@ -1,6 +1,6 @@
{% url 'users:contractor-office' pk=contractor.pk as contractor_office_url %}
{% url 'users:contractor-office-open-projects' pk=contractor.pk as contractor_office_open_projects_url %}
{% url 'users:contractor-office-chat-projects' pk=contractor.pk as contractor_office_chat_projects_url %}
{% url 'users:contractor-office' as contractor_office_url %}
{% url 'users:contractor-office-open-projects' as contractor_office_open_projects_url %}
{% url 'users:contractor-office-chat-projects' as contractor_office_chat_projects_url %}
<div class="profileTabs">
<ul class="nav nav-tabs nav-justified">

@ -38,11 +38,11 @@ urlpatterns = [
urls.url(r'^contractors/team/create/$', TeamCreateView.as_view(), name='team-create'),
urls.url(r'^contractorsresumefiles/create/$', contractor_resumefile_create, name='contractor-resume-file-create'),
urls.url(r'^contractors/(?P<pk>\d+)/$', ContractorProfileView.as_view(), name='contractor-profile'),
urls.url(r'^contractor-office/(?P<pk>\d+)/$', ContractorOfficeView.as_view(), name='contractor-office'),
urls.url(r'^contractor-office/(?P<pk>\d+)/open-projects/$', ContractorOfficeProjectsView.as_view(), name='contractor-office-open-projects'),
urls.url(r'^contractor-office/$', ContractorOfficeView.as_view(), name='contractor-office'),
urls.url(r'^contractor-office/open-projects/$', ContractorOfficeProjectsView.as_view(), name='contractor-office-open-projects'),
urls.url(r'^contractor-office/work-projects/$', ContractorChatProjectsView.as_view(), name='contractor-office-chat-projects'),
urls.url(r'^teams/(?P<pk>\d+)/$', TeamProfileView.as_view(), name='team-profile'),
urls.url(r'^contractor-office/(?P<pk>\d+)/work-projects/$', ContractorChatProjectsView.as_view(), name='contractor-office-chat-projects'),
urls.url(r'^add-team-member/(?P<pk>\d+)/$', AddTeamMember.as_view(), name='add-team-member'),
]

@ -39,6 +39,29 @@ from .forms import (
)
def _get_projects_grouped(contractor):
private_open_projects = tuple(a.project for a in contractor.contractor_answers.filter(project__state='active', rejected=False))
try:
team_open_projects = tuple(a.project for a in contractor.team.answers.filter(project__state='active', rejected=False))
except:
team_open_projects = ()
private_archived_projects = tuple(a.project for a in contractor.contractor_answers.filter(project__state='active', rejected=True))
try:
team_archived_projects = tuple(a.project for a in contractor.team.answers.filter(project__state='active', rejected=True))
except:
team_archived_projects = ()
return {
'private_open_projects': private_open_projects,
'team_open_projects': team_open_projects,
'private_archived_projects': private_archived_projects,
'team_archived_projects': team_archived_projects,
}
class UserProfileEditView(BaseMixin, View):
form_class = UserProfileEditForm
template_name = 'user_profile_edit.html'
@ -387,11 +410,14 @@ class ContractorOfficeView(BaseMixin, DetailView):
form_class = TeamForm
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_contractor() and request.user.pk == int(kwargs.get('pk')):
if request.user.is_authenticated() and request.user.is_contractor():
return super().dispatch(request, *args, **kwargs)
else:
raise PermissionDenied
def get_object(self, queryset=None):
return self.request.user
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
@ -406,6 +432,22 @@ class ContractorOfficeView(BaseMixin, DetailView):
# for c in members:
# compl_proj.extend(tuple(o.project for o in c.orders.filter(status='completed')))
grouped_projects = _get_projects_grouped(contractor)
private_open_projects = grouped_projects['private_open_projects']
team_open_projects = grouped_projects['team_open_projects']
private_archived_projects = grouped_projects['private_archived_projects']
team_archived_projects = grouped_projects['team_archived_projects']
context['open_project_count'] = len(private_open_projects) + len(team_open_projects)
context['archived_project_count'] = len(private_archived_projects) + len(team_archived_projects)
context['all_project_count'] = \
len(private_open_projects) + len(private_archived_projects) + \
len(team_open_projects) + len(team_archived_projects)
compl_proj = tuple(o.project for o in team.orders.filter(status='completed'))
context['completed_project_count'] = len(compl_proj)
@ -439,8 +481,25 @@ class ContractorChatProjectsView(View):
def get(self, request, *args, **kwargs):
context = {}
contractor = get_object_or_404(User.contractor_objects, pk=kwargs.get('pk'))
contractor = request.user
context['contractor'] = contractor
grouped_projects = _get_projects_grouped(contractor)
private_open_projects = grouped_projects['private_open_projects']
team_open_projects = grouped_projects['team_open_projects']
private_archived_projects = grouped_projects['private_archived_projects']
team_archived_projects = grouped_projects['team_archived_projects']
context['open_project_count'] = len(private_open_projects) + len(team_open_projects)
context['archived_project_count'] = len(private_archived_projects) + len(team_archived_projects)
context['all_project_count'] = \
len(private_open_projects) + len(private_archived_projects) + \
len(team_open_projects) + len(team_archived_projects)
team_ids = []
if request.user.is_owner_team():
team_ids.append(request.user.team.pk)
@ -470,7 +529,7 @@ class ContractorOfficeProjectsView(BaseMixin, View):
template_name = 'contractor_office_open_projects.html'
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_contractor() and request.user.pk == int(kwargs.get('pk')):
if request.user.is_authenticated() and request.user.is_contractor():
return super().dispatch(request, *args, **kwargs)
else:
raise PermissionDenied
@ -478,26 +537,23 @@ class ContractorOfficeProjectsView(BaseMixin, View):
def get(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
contractor = get_object_or_404(User.contractor_objects, pk=kwargs.get('pk'))
contractor = request.user
context['contractor'] = contractor
private_open_projects = tuple(a.project for a in contractor.contractor_answers.filter(project__state='active', rejected=False))
private_archived_projects = tuple(a.project for a in contractor.contractor_answers.filter(project__state='active', rejected=True))
grouped_projects = _get_projects_grouped(contractor)
try:
team_open_projects = tuple(a.project for a in contractor.team.answers.filter(project__state='active', rejected=False))
team_archived_projects = tuple(a.project for a in contractor.team.answers.filter(project__state='active', rejected=True))
except:
team_open_projects = ()
team_archived_projects = ()
private_open_projects = grouped_projects['private_open_projects']
team_open_projects = grouped_projects['team_open_projects']
private_archived_projects = grouped_projects['private_archived_projects']
team_archived_projects = grouped_projects['team_archived_projects']
context['open_project_count'] = len(private_open_projects) + len(team_open_projects)
context['archived_project_count'] = len(private_archived_projects) + len(team_archived_projects)
context['all_project_count'] = \
len(private_open_projects) + len(private_archived_projects) + \
len(team_open_projects) + len(team_archived_projects)
context['open_project_count'] = len(private_open_projects) + len(team_open_projects)
context['archived_project_count'] = len(private_archived_projects) + len(team_archived_projects)
if request.GET.get('owner') == 'private':
if request.GET.get('archived') == 'on':
projects = private_archived_projects
@ -639,7 +695,7 @@ class TeamCreateView(View):
instance = form.save(commit=False)
instance.owner = request.user
instance.save()
return redirect('users:contractor-office', pk=request.user.pk)
return redirect('users:contractor-office')
class ContractorResumeUpdateView(UpdateView):

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-12 10:05
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('work_sell', '0012_merge'),
]
operations = [
migrations.AlterField(
model_name='worksell',
name='term_type',
field=models.CharField(blank=True, choices=[('day', 'день'), ('hour', 'час'), ('month', 'месяц'), ('project', 'проект')], default='hour', max_length=20, null=True),
),
]
Loading…
Cancel
Save