From 27ea44b2788dd64431e82d8acddbabdefa50ad9b Mon Sep 17 00:00:00 2001 From: PekopT Date: Fri, 26 Aug 2016 20:44:01 +0300 Subject: [PATCH 1/6] various --- projects/forms.py | 2 +- projects/models.py | 8 ++++---- templates/partials/footer.html | 18 +++++++++++++----- users/templates/contractor_filter.html | 2 +- work_sell/models.py | 8 ++++---- 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/projects/forms.py b/projects/forms.py index ebeb6e5..41cd1fb 100644 --- a/projects/forms.py +++ b/projects/forms.py @@ -182,7 +182,7 @@ class RealtyForm(forms.ModelForm): class PortfolioForm(forms.ModelForm): - duplicate = forms.BooleanField(required=False,label='Some label here') + duplicate = forms.BooleanField(required=False, label='Some label here') images_ids = forms.CharField(required=True) class Meta: diff --git a/projects/models.py b/projects/models.py index 4ab5b59..cfedcda 100644 --- a/projects/models.py +++ b/projects/models.py @@ -287,7 +287,7 @@ class Portfolio(models.Model): budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True, blank=True) building_classification = models.ForeignKey(BuildingClassfication, related_name='portfolios', null=True, blank=True) construction_type = models.ForeignKey(ConstructionType, related_name='portfolios', null=True, blank=True) - created = models.DateTimeField(default=timezone.now) + created = models.DateTimeField(default=timezone.now, auto_now_add=True, auto_created=True) currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES, null=True, blank=True) description = models.TextField() location = TreeForeignKey('common.Location', related_name='portfolios', null=True, blank=True) @@ -297,19 +297,19 @@ class Portfolio(models.Model): term_type = models.CharField(max_length=20, choices=TERMS, default='hour', null=True, blank=True) user = models.ForeignKey(User, related_name='portfolios', null=True, blank=True) worksell = models.BooleanField(default=False) - + def __str__(self): return self.name def get_prev(self): try: - return self.get_previous_by_created() + return self.get_previous_by_created(user=self.user) except self.DoesNotExist: return None def get_next(self): try: - return self.get_next_by_created() + return self.get_next_by_created(user=self.user) except self.DoesNotExist: return None diff --git a/templates/partials/footer.html b/templates/partials/footer.html index 39583e9..b29df6b 100644 --- a/templates/partials/footer.html +++ b/templates/partials/footer.html @@ -19,6 +19,7 @@

Профиль

diff --git a/users/templates/contractor_filter.html b/users/templates/contractor_filter.html index 9bf6121..9879f71 100644 --- a/users/templates/contractor_filter.html +++ b/users/templates/contractor_filter.html @@ -142,7 +142,7 @@ type="submit" name="{{ form.party_types.html_name }}" value="{{ val }}" - class="{% if val == last_party_types %}active{% endif %} btn btn-default"> + class="{% if val == last_party_types or not last_party_types and val == 'all' %}active{% endif %} btn btn-default"> {{ text }} {% endfor %} diff --git a/work_sell/models.py b/work_sell/models.py index b2a6f68..b9f7d22 100644 --- a/work_sell/models.py +++ b/work_sell/models.py @@ -16,8 +16,8 @@ class WorkSell(models.Model): budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True, blank=True) building_classification = models.ForeignKey(BuildingClassfication, related_name='worksells', null=True, blank=True) construction_type = models.ForeignKey(ConstructionType, related_name='worksells', null=True, blank=True) - contractor = models.ForeignKey(User, related_name='work_sell', null=True, blank=True) # TODO: Pluralize related name - created = models.DateTimeField(default=timezone.now) + contractor = models.ForeignKey(User, related_name='work_sell', null=True, blank=True) # TODO: Pluralize related name + created = models.DateTimeField(default=timezone.now, auto_now_add=True) currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES, null=True, blank=True) description = models.TextField(blank=True) location = TreeForeignKey('common.Location', related_name='worksells', null=True, blank=True) @@ -35,13 +35,13 @@ class WorkSell(models.Model): def get_prev(self): try: - return self.get_previous_by_created() + return self.get_previous_by_created(contractor=self.contractor) except self.DoesNotExist: return None def get_next(self): try: - return self.get_next_by_created() + return self.get_next_by_created(contractor=self.contractor) except self.DoesNotExist: return None From 118009aa185320476d2ef88684195dbd0a1570d5 Mon Sep 17 00:00:00 2001 From: ArturBaybulatov Date: Fri, 26 Aug 2016 20:44:11 +0300 Subject: [PATCH 2/6] #ARC-9 --- api/urls.py | 4 +- .../management/commands/generate_projects.py | 2 +- archilance/util.py | 10 +++++ projects/models.py | 5 ++- projects/views.py | 12 +++--- users/models.py | 10 ++--- users/templates/contractor_office.html | 30 +++++++-------- users/views.py | 38 ++++++++++++++----- .../migrations/0006_remove_worksell_team.py | 19 ++++++++++ work_sell/models.py | 1 - 10 files changed, 89 insertions(+), 42 deletions(-) create mode 100644 work_sell/migrations/0006_remove_worksell_team.py diff --git a/api/urls.py b/api/urls.py index 6fc2a21..e0a3b38 100755 --- a/api/urls.py +++ b/api/urls.py @@ -8,6 +8,7 @@ from .views import ( LocationViewSet, MessageViewSet, NoteViewSet, + OrderViewSet, PortfolioPhotoViewSet, PortfolioViewSet, ProjectViewSet, @@ -17,7 +18,6 @@ from .views import ( StageViewSet, TeamViewSet, UserViewSet, - OrderViewSet, ) @@ -30,10 +30,10 @@ router.register(r'documents', DocumentViewSet) router.register(r'locations', LocationViewSet) router.register(r'message', MessageViewSet) router.register(r'note', NoteViewSet) +router.register(r'orders', OrderViewSet) router.register(r'portfolio-photos', PortfolioPhotoViewSet) router.register(r'portfolios', PortfolioViewSet) router.register(r'projects', ProjectViewSet) -router.register(r'orders', OrderViewSet) router.register(r'realties', RealtyViewSet) router.register(r'reviews', ReviewViewSet) router.register(r'specializations', SpecializationViewSet) diff --git a/archilance/management/commands/generate_projects.py b/archilance/management/commands/generate_projects.py index 099330c..49daa9b 100644 --- a/archilance/management/commands/generate_projects.py +++ b/archilance/management/commands/generate_projects.py @@ -78,7 +78,7 @@ class Command(BaseCommand): project=project, contractor=_.sample((None, User.contractor_objects.order_by('?').first())), secure=_.sample((True, False)), - status=_.sample((True, False)), + status=_.sample(Order.STATUSES)[0], ) return project diff --git a/archilance/util.py b/archilance/util.py index b919d9f..361b400 100644 --- a/archilance/util.py +++ b/archilance/util.py @@ -1,4 +1,5 @@ from django.core import validators +from django.core.exceptions import ObjectDoesNotExist from django.shortcuts import _get_queryset from django.utils import timezone from pprint import pprint, pformat @@ -54,6 +55,15 @@ def get_or_none(klass, *args, **kwargs): return None +def get_related_or_none(obj, attr): + try: + rel = getattr(obj, attr) + except ObjectDoesNotExist: + rel = None + + return rel + + def get_attr_or_none(klass, *args, attr=None, **kwargs): object = get_or_none(klass, *args, **kwargs) diff --git a/projects/models.py b/projects/models.py index 7c1e158..22e32a1 100644 --- a/projects/models.py +++ b/projects/models.py @@ -204,12 +204,13 @@ class Order(models.Model): ('process', 'В процессе'), ('completed', 'Завершен'), ) - contractor = models.ForeignKey(User, null=True, blank=True, related_name='orders') - team = models.ForeignKey(Team, null=True, blank=True, related_name='orders') + + contractor = models.ForeignKey(User, null=True, blank=True, related_name='orders') # Related name should've been "contractor_orders" created = models.DateTimeField(default=timezone.now) project = models.OneToOneField(Project, related_name='order') secure = models.BooleanField(default=False) status = models.CharField(max_length=30, choices=STATUSES, default='created') + team = models.ForeignKey(Team, null=True, blank=True, related_name='orders') def __str__(self): return self.project.name diff --git a/projects/views.py b/projects/views.py index 630ca47..c8ee7dd 100644 --- a/projects/views.py +++ b/projects/views.py @@ -59,8 +59,7 @@ class ProjectDetailWithAnswerView(BaseMixin, View): answer = _.first(_.filter(project_answers, lambda a: a.author == contractor)) if not answer: - try: team = contractor.team - except Team.DoesNotExist: team = None + team = util.get_related_or_none(contractor, 'team') if team: answer = _.first(_.filter(project_answers, lambda a: a.author == team)) @@ -68,8 +67,10 @@ class ProjectDetailWithAnswerView(BaseMixin, View): context.update({'answer': answer}) if not answer: - try: contractor.team; context.update({'can_answer_as_team': True}) - except Team.DoesNotExist: pass + team = util.get_related_or_none(contractor, 'team') + + if team: + context.update({'can_answer_as_team': True}) if request.GET.get('answer_as_team') == 'on': context.update({'answer_as_team': True}) @@ -154,8 +155,7 @@ class ProjectAnswerCreateMessageView(BaseMixin, View): if isinstance(answer.author, User) and answer.author == request.user: message.contractor_or_team = request.user elif isinstance(answer.author, Team): - try: team = request.user.team - except Team.DoesNotExist: team = None + team = util.get_related_or_none(request.user, 'team') if team and answer.author == team: message.contractor_or_team = team diff --git a/users/models.py b/users/models.py index 432e1f2..f33bb5e 100644 --- a/users/models.py +++ b/users/models.py @@ -147,11 +147,11 @@ class User(AbstractBaseUser, PermissionsMixin): if self.location: if self.location.level == 3: return self.location.parent.parent.name + ', ' + self.location.name - else: - return None - else: - return None - + elif self.location.level == 2: + return self.location.parent.name + ', ' + self.location.name + elif self.location.level == 1: + return self.location.name + @property def is_staff(self): return self.is_superuser diff --git a/users/templates/contractor_office.html b/users/templates/contractor_office.html index 3ccb4b4..6b78b0a 100644 --- a/users/templates/contractor_office.html +++ b/users/templates/contractor_office.html @@ -17,12 +17,12 @@
- - - {% if not contractor.is_owner_team %} + {% if contractor.team %} + + {% else %} @@ -58,7 +58,7 @@
- {% if contractor.is_owner_team %} + {% if contractor.team %}
@@ -82,11 +82,11 @@

Состав группы

- {% for p in participants %} + {% for c in team_members %}
- {% if p.avatar %} - {% thumbnail p.avatar "60x60" crop="center" as im %} + {% if c.avatar %} + {% thumbnail c.avatar "60x60" crop="center" as im %} mess-image {% endthumbnail %} {% else %} @@ -95,10 +95,10 @@

- {{ p.get_full_name }} + {{ c.get_full_name }}

-

{{ p.get_popular_specialization }}

+

{{ c.get_popular_specialization }}

{% empty %} В группе пока нет участников @@ -110,15 +110,15 @@

{{ contractor.team.name }}

-

Россия, Москва

+

{{ contractor.get_location }}

Свободен
diff --git a/users/views.py b/users/views.py index d7b1394..4b50b4b 100644 --- a/users/views.py +++ b/users/views.py @@ -364,24 +364,42 @@ class ContractorOfficeView(DetailView): context_object_name = 'contractor' 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')): + return super().dispatch(request, *args, **kwargs) + else: + raise PermissionDenied + def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) - context['form_team'] = self.form_class - if self.object.is_owner_team(): - participants = self.object.team.contractors.all() - context['participants'] = participants - context['participants_count'] = len(participants) + contractor = self.object + + if util.get_related_or_none(contractor, 'team'): + members = contractor.team.contractors.all() + context['team_members'] = members + context['team_member_count'] = len(members) - contractors = tuple(itertools.chain(participants, (self.object,))) + compl_proj = [] + portfolios = [] + work_sells = [] - portfolios = Portfolio.objects.filter(user__in=contractors) - context['portfolios'] = portfolios + compl_proj.extend(tuple(o.project for o in contractor.orders.filter(status='completed'))) + portfolios.extend(contractor.portfolios.all()) + work_sells.extend(contractor.work_sell.all()) + + for c in members: + compl_proj.extend(tuple(o.project for o in c.orders.filter(status='completed'))) + portfolios.extend(c.portfolios.all()) + work_sells.extend(c.work_sell.all()) - work_sells = WorkSell.objects.filter(contractor__in=contractors) + context['completed_project_count'] = len(compl_proj) + context['portfolios'] = portfolios context['work_sells'] = work_sells - context['reviews'] = Review.objects.filter(target_contractor__in=contractors) + context['reviews'] = Review.objects.filter(target_contractor__in=itertools.chain((contractor,), members)) + + context['form_team'] = self.form_class return context diff --git a/work_sell/migrations/0006_remove_worksell_team.py b/work_sell/migrations/0006_remove_worksell_team.py new file mode 100644 index 0000000..f8f09fe --- /dev/null +++ b/work_sell/migrations/0006_remove_worksell_team.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-08-26 17:25 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('work_sell', '0005_remove_worksell_img'), + ] + + operations = [ + migrations.RemoveField( + model_name='worksell', + name='team', + ), + ] diff --git a/work_sell/models.py b/work_sell/models.py index b2a6f68..d861fdb 100644 --- a/work_sell/models.py +++ b/work_sell/models.py @@ -23,7 +23,6 @@ class WorkSell(models.Model): location = TreeForeignKey('common.Location', related_name='worksells', null=True, blank=True) name = models.CharField(max_length=255) specialization = TreeForeignKey(Specialization, related_name='worksells', null=True, blank=True) - team = models.ForeignKey(Team, related_name='work_sells', null=True, blank=True) term = models.IntegerField(default=0, null=True, blank=True) term_type = models.CharField(max_length=20, choices=TERMS, default='hour', null=True, blank=True) From facb3cf7441a9d6fc767dfd5a60da56bd71f2079 Mon Sep 17 00:00:00 2001 From: shishman Date: Fri, 26 Aug 2016 20:59:34 +0300 Subject: [PATCH 3/6] css edited --- assets/css/main.css | 46 ++++++++++++++++++++++++-- projects/templates/project_detail.html | 4 +-- users/templates/contractor_filter.html | 2 +- 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/assets/css/main.css b/assets/css/main.css index 23624e2..a422213 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -5524,7 +5524,7 @@ input[type="radio"]:checked + span { width: 216px; } .proj_answ_form .textAreaBlock2 input[name="term"]{ - width: 262px; + width: 258px; } .proj_answ_form .textAreaBlock2 p span{ position: absolute; @@ -5759,7 +5759,7 @@ input[type="radio"]:checked + span { margin-bottom: 0 !important } .infoProfile .dropdown-menu{ - height: 316px; + height: auto; } .form-regestration{ padding: 20px 0 40px 0; @@ -5819,4 +5819,46 @@ input[type="radio"]:checked + span { text-transform: initial; letter-spacing: normal; } +.fr_answer{ + width: 100%; + height: 110px; + border: 1px solid #cdcdcd; + resize: none; + padding: 10px 15px; + color: #3c1a06; + font-family: 'Arial-MT-Regular', sans-serif; + font-size: 14px; + float: left; + margin: 0px 0px 0px 55px; +} +.fr_answer_sen{ + float: left; + border-radius: 40px; + font-family: 'pfdintextcomppro-regular', sans-serif; + letter-spacing: 2px; + color: #373737; + margin: 20px 0 0 55px; + font-size: 15px; + border: 1px solid #BEBEBE; + padding: 17px 46px; + text-transform: uppercase; +} +.fa-pencil:before, .fa-times:before{ + color: #fff; +} +.mainMenu li.active > a { + border-color: #ff0029; +} +.mainMenu li.icon_tm1.active span{ + background: url('../img/listMain2.png') no-repeat !important; +} +.mainMenu li.officeList.active span { + background: url('../img/list4tml.png') no-repeat center !important; +} +.mainMenu li.icon_tm2.active span{ + background: url('../img/listMain2.png') no-repeat center !important; +} +.mainMenu li.icon_tm3.active span{ + background: url('../img/listMain2.png') no-repeat right !important; +} /*end_new*/ \ No newline at end of file diff --git a/projects/templates/project_detail.html b/projects/templates/project_detail.html index 6141576..5add600 100644 --- a/projects/templates/project_detail.html +++ b/projects/templates/project_detail.html @@ -313,8 +313,8 @@ {% csrf_token %} -
-
+
+
diff --git a/users/templates/contractor_filter.html b/users/templates/contractor_filter.html index 9bf6121..98bad17 100644 --- a/users/templates/contractor_filter.html +++ b/users/templates/contractor_filter.html @@ -42,7 +42,7 @@
-
+
найти исполнителя From 7107c55f66b3f70a7f9664ed7ab82bd3ca38d58e Mon Sep 17 00:00:00 2001 From: PekopT Date: Fri, 26 Aug 2016 21:18:30 +0300 Subject: [PATCH 4/6] various --- projects/models.py | 2 +- users/templates/contractor_profile.html | 8 ++++++-- work_sell/models.py | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/projects/models.py b/projects/models.py index cfedcda..a4cebcd 100644 --- a/projects/models.py +++ b/projects/models.py @@ -287,7 +287,7 @@ class Portfolio(models.Model): budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True, blank=True) building_classification = models.ForeignKey(BuildingClassfication, related_name='portfolios', null=True, blank=True) construction_type = models.ForeignKey(ConstructionType, related_name='portfolios', null=True, blank=True) - created = models.DateTimeField(default=timezone.now, auto_now_add=True, auto_created=True) + created = models.DateTimeField(auto_now_add=True, auto_created=True) currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES, null=True, blank=True) description = models.TextField() location = TreeForeignKey('common.Location', related_name='portfolios', null=True, blank=True) diff --git a/users/templates/contractor_profile.html b/users/templates/contractor_profile.html index 89b546f..faa9a36 100644 --- a/users/templates/contractor_profile.html +++ b/users/templates/contractor_profile.html @@ -383,7 +383,9 @@ {% thumbnail diplom.img "210x334" crop="center" as im %} {% endthumbnail %}
@@ -414,7 +416,9 @@ {% thumbnail cro.img "210x334" crop="center" as im %}
-
+ +
+
{% endthumbnail %}
diff --git a/work_sell/models.py b/work_sell/models.py index b9f7d22..94f0ddc 100644 --- a/work_sell/models.py +++ b/work_sell/models.py @@ -17,7 +17,7 @@ class WorkSell(models.Model): building_classification = models.ForeignKey(BuildingClassfication, related_name='worksells', null=True, blank=True) construction_type = models.ForeignKey(ConstructionType, related_name='worksells', null=True, blank=True) contractor = models.ForeignKey(User, related_name='work_sell', null=True, blank=True) # TODO: Pluralize related name - created = models.DateTimeField(default=timezone.now, auto_now_add=True) + created = models.DateTimeField(auto_now_add=True) currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES, null=True, blank=True) description = models.TextField(blank=True) location = TreeForeignKey('common.Location', related_name='worksells', null=True, blank=True) From bfb646ac0086a68bf15d4cf9e6e36a8a62d4dd64 Mon Sep 17 00:00:00 2001 From: shishman Date: Fri, 26 Aug 2016 21:59:05 +0300 Subject: [PATCH 5/6] css edited --- assets/css/main.css | 41 +++++++++++++++++++++++++++++ templates/cms_pages/cms_page.html | 36 ++++++++++++++++++------- wallets/templates/score-detail.html | 2 +- 3 files changed, 69 insertions(+), 10 deletions(-) diff --git a/assets/css/main.css b/assets/css/main.css index a422213..3ed09cb 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -5861,4 +5861,45 @@ input[type="radio"]:checked + span { .mainMenu li.icon_tm3.active span{ background: url('../img/listMain2.png') no-repeat right !important; } +.faq_page_inn{ + padding: 40px 0; +} +.faq_page_inn h2 { + font-size: 32px; + font-weight: normal; + margin-bottom: 20px; + margin-top: 10px; +} +.faq_page_inn h3{ + font-weight: 600; + margin-bottom: 12px; + margin-top: 28px; + font-size: 1.17em; +} +.faq_page_inn ol, .faq_page_inn ul{ + padding-left: 40px; + margin-top: 20px; +} +.faq_page_inn ol li, .faq_page_inn ul li{ + padding-left: 8px; + list-style: inherit !important; + display: list-item; + list-style-type:inherit !important; + margin-top: 5px; +} +.faq_page_inn a{ + text-decoration: underline !important; +} +.faq_page_inn a:hover{ + text-decoration: none !important; +} +.faq_page_inn div{ + margin-top: 20px; +} +a.linkS2[data-target="#withdraw-money"]{ + float: none; + display: table; + margin: auto; + margin-bottom: 52px; +} /*end_new*/ \ No newline at end of file diff --git a/templates/cms_pages/cms_page.html b/templates/cms_pages/cms_page.html index a480c11..2a09343 100644 --- a/templates/cms_pages/cms_page.html +++ b/templates/cms_pages/cms_page.html @@ -9,14 +9,32 @@
+
+
+ {% for block in page.body %} + {% if block.block_type == 'heading' %} +

{{ block.value }}

+ {% else %} +
+ {{ block }} +

FAQ

+

Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has

+

is simply dummy text of the printing and typesetting industry

+
    +
  1. Many desktop publishing packages and web page editors now use Lorem Ipsum
  2. +
  3. Many desktop publishing packages and web page editors now use Lorem Ipsum
  4. +
  5. Many desktop publishing packages and web page editors now use Lorem Ipsum
  6. +
+
    +
  • Many desktop publishing packages and web page editors now use Lorem Ipsum
  • +
  • Many desktop publishing packages and web page editors now use Lorem Ipsum.
  • +
  • Many desktop publishing packages and web page editors now use Lorem Ipsum
  • +
+
Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum
+
+ {% endif %} + {% endfor %} +
+
- {% for block in page.body %} - {% if block.block_type == 'heading' %} -

{{ block.value }}

- {% else %} -
- {{ block }} -
- {% endif %} - {% endfor %} {% endblock %} \ No newline at end of file diff --git a/wallets/templates/score-detail.html b/wallets/templates/score-detail.html index 275e727..9e72082 100644 --- a/wallets/templates/score-detail.html +++ b/wallets/templates/score-detail.html @@ -22,7 +22,7 @@
{% endif %} -
+ From 10032e036aa72918b4211746b7777a49bfd2bbd3 Mon Sep 17 00:00:00 2001 From: PekopT Date: Mon, 29 Aug 2016 11:28:31 +0300 Subject: [PATCH 6/6] various --- templates/partials/header.html | 3 +++ users/templates/user_financial_info_edit.html | 11 +++++++---- users/views.py | 17 ++++++++--------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/templates/partials/header.html b/templates/partials/header.html index 248cd94..99be311 100644 --- a/templates/partials/header.html +++ b/templates/partials/header.html @@ -89,18 +89,21 @@
- +
@@ -165,7 +165,7 @@
- +
@@ -207,8 +207,11 @@
- {{ fin_info_form.passport_scan.value }} - + {% if fin_info_form.passport_scan.value %} +{# {{ fin_info_form.passport_scan.value }}#} + Скан-копия загружена + {% endif %} +

Прикрепить файл

diff --git a/users/views.py b/users/views.py index 4b50b4b..eba8e72 100644 --- a/users/views.py +++ b/users/views.py @@ -188,8 +188,6 @@ class ContractorFilterView(BaseMixin, View): context.update({'last_party_types': last_party_types}) - - if get_contractors: contractors = User.contractor_objects.all() @@ -216,9 +214,7 @@ class ContractorFilterView(BaseMixin, View): if constr_type: contractors = contractors.filter(orders__project__realty__construction_type=constr_type) - - - + if get_teams: teams = Team.objects.all() @@ -278,7 +274,6 @@ class ContractorFilterView(BaseMixin, View): count = coll.count() display_msg = 'Найдено %s групп' % count if count > 0 else 'Ничего не найдено' - order_by = form.cleaned_data.get('order_by') last_order_by = form.cleaned_data.get('last_order_by') reverse_order = form.cleaned_data.get('reverse_order') @@ -421,9 +416,13 @@ class ContractorOfficeProjectsView(BaseMixin, View): 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)) - - 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)) + + 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 = () context['all_project_count'] = \ len(private_open_projects) + len(private_archived_projects) + \