|
|
|
|
@ -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): |
|
|
|
|
|