diff --git a/projects/migrations/0030_auto_20160912_1305.py b/projects/migrations/0030_auto_20160912_1305.py
new file mode 100644
index 0000000..f62608b
--- /dev/null
+++ b/projects/migrations/0030_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),
+ ),
+ ]
diff --git a/templates/partials/footer.html b/templates/partials/footer.html
index 764504f..0a12fbf 100644
--- a/templates/partials/footer.html
+++ b/templates/partials/footer.html
@@ -38,7 +38,7 @@
{% else %}
- Мой офис
+ Мой офис
{% endif %}
{% if request.user.is_staff %}
diff --git a/templates/partials/header.html b/templates/partials/header.html
index 2e710ba..410e8ed 100644
--- a/templates/partials/header.html
+++ b/templates/partials/header.html
@@ -27,7 +27,7 @@
{% if request.user.is_contractor %}
- Мой офис
+ Мой офис
{% endif %}
diff --git a/users/templates/contractor_office.html b/users/templates/contractor_office.html
index fe6d3cc..d9b3c65 100644
--- a/users/templates/contractor_office.html
+++ b/users/templates/contractor_office.html
@@ -30,6 +30,14 @@
{% endif %}
+
+
diff --git a/users/templates/partials/contractor_profile_tabs.html b/users/templates/partials/contractor_profile_tabs.html
index aa7d6cd..ee6f40c 100644
--- a/users/templates/partials/contractor_profile_tabs.html
+++ b/users/templates/partials/contractor_profile_tabs.html
@@ -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 %}
diff --git a/users/urls.py b/users/urls.py
index d7e8021..1fcf81c 100755
--- a/users/urls.py
+++ b/users/urls.py
@@ -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\d+)/$', ContractorProfileView.as_view(), name='contractor-profile'),
- urls.url(r'^contractor-office/(?P\d+)/$', ContractorOfficeView.as_view(), name='contractor-office'),
- urls.url(r'^contractor-office/(?P\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\d+)/$', TeamProfileView.as_view(), name='team-profile'),
- urls.url(r'^contractor-office/(?P\d+)/work-projects/$', ContractorChatProjectsView.as_view(), name='contractor-office-chat-projects'),
urls.url(r'^add-team-member/(?P\d+)/$', AddTeamMember.as_view(), name='add-team-member'),
]
diff --git a/users/views.py b/users/views.py
index c8423a3..4426fb3 100644
--- a/users/views.py
+++ b/users/views.py
@@ -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))
-
- 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 = ()
+ grouped_projects = _get_projects_grouped(contractor)
- context['all_project_count'] = \
- len(private_open_projects) + len(private_archived_projects) + \
- len(team_open_projects) + len(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)
+
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):
diff --git a/work_sell/migrations/0013_auto_20160912_1305.py b/work_sell/migrations/0013_auto_20160912_1305.py
new file mode 100644
index 0000000..9f84589
--- /dev/null
+++ b/work_sell/migrations/0013_auto_20160912_1305.py
@@ -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),
+ ),
+ ]