diff --git a/contracts/admin.py b/contracts/admin.py index 1ea01de6d9c1ec44cfc51df2e4e77a15f0719785..22e0dd8bafbf988fa3ed1fa71a8a037306759157 100644 --- a/contracts/admin.py +++ b/contracts/admin.py @@ -42,7 +42,7 @@ class IndexHiddenModelAdmin(MarkdownxGuardedModelAdmin): def permissions_mixin_factory( change_permission: str, delete_permission: str, - obj_conditional: typing.Callable = lambda request, obj: True + obj_conditional: typing.Callable = lambda request, obj: True, ) -> object: class Mixin: def has_change_permission(self, request, obj=None) -> bool: @@ -95,7 +95,8 @@ ParentContractApprovedPermissionsMixin = permissions_mixin_factory( ParentContractOwnPermissionsMixin = permissions_mixin_factory( "contracts.edit_others", "contracts.delete_others", - obj_conditional=lambda request, obj: get_obj_contract(obj).created_by != request.user, + obj_conditional=lambda request, obj: get_obj_contract(obj).created_by + != request.user, ) @@ -500,7 +501,8 @@ class SigneeSignatureRepresentativeAdmin( permissions_mixin_factory( "contracts.edit_others", "contracts.delete_others", - obj_conditional=lambda request, obj: get_obj_contractee_contract(obj).created_by != request.user, + obj_conditional=lambda request, obj: get_obj_contractee_contract(obj).created_by + != request.user, ), ): pass @@ -511,12 +513,15 @@ class ContracteeSignatureRepresentativeAdmin( permissions_mixin_factory( "contracts.edit_when_approved", "contracts.delete_when_approved", - obj_conditional=lambda request, obj: get_obj_contractee_contract(obj).is_approved, + obj_conditional=lambda request, obj: get_obj_contractee_contract( + obj + ).is_approved, ), permissions_mixin_factory( "contracts.edit_others", "contracts.delete_others", - obj_conditional=lambda request, obj: get_obj_contractee_contract(obj).created_by != request.user, + obj_conditional=lambda request, obj: get_obj_contractee_contract(obj).created_by + != request.user, ), ): pass diff --git a/contracts/management/commands/import_old_contracts.py b/contracts/management/commands/import_old_contracts.py index d2fafd01efce80a7967a22edb1984e9eb8b7b81a..312f62523f4e3f7efd5d8020d72702f44fe87081 100644 --- a/contracts/management/commands/import_old_contracts.py +++ b/contracts/management/commands/import_old_contracts.py @@ -1,8 +1,8 @@ import io import os import re -import string import shutil +import string from datetime import date, datetime import yaml @@ -588,7 +588,9 @@ class Command(BaseCommand): issue_count += 1 contract.notes += f"Špatně zadaná funkce zástupce smluvní strany: {signing_party['funkce']}\n" issues.append( - self.use_issue("Špatně zadaná funkce zástupce smluvní strany") + self.use_issue( + "Špatně zadaná funkce zástupce smluvní strany" + ) ) if self.verbosity >= 2: @@ -608,7 +610,9 @@ class Command(BaseCommand): issue_count += 1 contract.notes += f"Špatně zadaný jeden ze zástupců smluvní strany: {representative_name}\n" issues.append( - self.use_issue("Špatně zadaný zástupce smluvní strany") + self.use_issue( + "Špatně zadaný zástupce smluvní strany" + ) ) if self.verbosity >= 2: @@ -779,9 +783,7 @@ class Command(BaseCommand): elif value is not None: observed_issues_count += 1 contract.notes += f"Špatně zadaný začátek platnosti: {value}\n" - issues.append( - self.use_issue("Špatně zadaný začátek platnosti") - ) + issues.append(self.use_issue("Špatně zadaný začátek platnosti")) if self.verbosity >= 2: self.stderr.write( @@ -798,9 +800,7 @@ class Command(BaseCommand): ): observed_issues_count += 1 contract.notes += f"Špatně zadaný konec platnosti: {value}\n" - issues.append( - self.use_issue("Špatně zadaný konec platnosti") - ) + issues.append(self.use_issue("Špatně zadaný konec platnosti")) if self.verbosity >= 2: self.stderr.write( @@ -914,9 +914,7 @@ class Command(BaseCommand): contract.notes += ( f"Původní, špatně zadané náklady: {value}\n" ) - issues.append( - self.use_issue("Špatně zadané náklady") - ) + issues.append(self.use_issue("Špatně zadané náklady")) if self.verbosity >= 2: self.stderr.write( @@ -944,9 +942,7 @@ class Command(BaseCommand): ): observed_issues_count += 1 contract.notes += f"Původní, neropoznané náklady: {value}\n" - issues.append( - self.use_issue("Špatně zadané náklady") - ) + issues.append(self.use_issue("Špatně zadané náklady")) if self.verbosity >= 2: self.stderr.write( @@ -987,9 +983,7 @@ class Command(BaseCommand): else: observed_issues_count += 1 contract.notes += f"Špatně zadaná spisovna: {value}\n" - issues.append( - self.use_issue("Špatně zadaná spisovna") - ) + issues.append(self.use_issue("Špatně zadaná spisovna")) if self.verbosity >= 2: self.stderr.write( @@ -1003,9 +997,7 @@ class Command(BaseCommand): contract.notes += ( f"Špatně zadané smluvní strany, nejsou seznam: {value}\n" ) - issues.append( - self.use_issue("Špatně zadaný smluvní strany") - ) + issues.append(self.use_issue("Špatně zadaný smluvní strany")) if self.verbosity >= 2: self.stderr.write( @@ -1124,9 +1116,7 @@ class Command(BaseCommand): contract.notes += ( f"Neexistující soubor: {file_value}.\n" ) - issues.append( - self.use_issue("Neexistující soubor") - ) + issues.append(self.use_issue("Neexistující soubor")) if self.verbosity >= 2: self.stderr.write( diff --git a/contracts/migrations/0059_alter_contract_is_valid.py b/contracts/migrations/0059_alter_contract_is_valid.py index df29dad1e83e8eb129a54642ba1ab5af5a3fbd6b..3d94f034352cc535066f134e4df2a306470ae868 100644 --- a/contracts/migrations/0059_alter_contract_is_valid.py +++ b/contracts/migrations/0059_alter_contract_is_valid.py @@ -4,15 +4,18 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ - ('contracts', '0058_alter_contract_options_alter_contractee_options_and_more'), + ("contracts", "0058_alter_contract_options_alter_contractee_options_and_more"), ] operations = [ migrations.AlterField( - model_name='contract', - name='is_valid', - field=models.BooleanField(default=False, help_text='Právní vztah vyplývající ze smlouvy je aktuálně účinný a platný', verbose_name='Je právně platná'), + model_name="contract", + name="is_valid", + field=models.BooleanField( + default=False, + help_text="Právní vztah vyplývající ze smlouvy je aktuálně účinný a platný", + verbose_name="Je právně platná", + ), ), ] diff --git a/contracts/migrations/0060_alter_contractfile_name.py b/contracts/migrations/0060_alter_contractfile_name.py index 6a8ebdc41e200b5d16abc7337c11671d311561ec..ac14b7d0d0ed106ad523edea9eeaab057d361414 100644 --- a/contracts/migrations/0060_alter_contractfile_name.py +++ b/contracts/migrations/0060_alter_contractfile_name.py @@ -4,16 +4,17 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ - ('contracts', '0059_alter_contract_is_valid'), + ("contracts", "0059_alter_contract_is_valid"), ] operations = [ migrations.AlterField( - model_name='contractfile', - name='name', - field=models.CharField(default='Neznámé jméno', max_length=256, verbose_name='Jméno'), + model_name="contractfile", + name="name", + field=models.CharField( + default="Neznámé jméno", max_length=256, verbose_name="Jméno" + ), preserve_default=False, ), ] diff --git a/contracts/migrations/0061_alter_contract_id_number.py b/contracts/migrations/0061_alter_contract_id_number.py new file mode 100644 index 0000000000000000000000000000000000000000..ae3ac80d17e9fb51fd21ec788eae39343269c8c8 --- /dev/null +++ b/contracts/migrations/0061_alter_contract_id_number.py @@ -0,0 +1,23 @@ +# Generated by Django 4.1.4 on 2023-05-23 13:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("contracts", "0060_alter_contractfile_name"), + ] + + operations = [ + migrations.AlterField( + model_name="contract", + name="id_number", + field=models.CharField( + blank=True, + help_text="<strong>Není IČO!</strong> Používá se pro identifikaci smluv s velkými organizacemi. Např. <code>MF-8687/2022/15-3</code>.", + max_length=256, + null=True, + verbose_name="Identifikační číslo", + ), + ), + ] diff --git a/contracts/models.py b/contracts/models.py index 3e2aad23ddaccd4fa1fbcf02e464f9177cb01ec3..17a15c82307ac6666cb9a0171dc7a6df8b8f1c6a 100644 --- a/contracts/models.py +++ b/contracts/models.py @@ -511,6 +511,10 @@ class Contract(NameStrMixin, models.Model): blank=True, null=True, verbose_name="Identifikační číslo", + help_text=mark_safe( + "<strong>Není IČO!</strong> Používá se pro identifikaci smluv " + "s velkými organizacemi. Např. <code>MF-8687/2022/15-3</code>." + ), ) types = models.ManyToManyField( @@ -856,8 +860,6 @@ class ContractFileField(models.FileField): class ContractFile(NameStrMixin, models.Model): name = models.CharField( max_length=256, - blank=False, - null=False, verbose_name="Jméno", ) diff --git a/registry/templates/admin/index.html b/registry/templates/admin/index.html index 834866cf238c91b8f6a64496c0e198221679e69c..f96c70270891fdaecba7b90c9f114447e32223e3 100644 --- a/registry/templates/admin/index.html +++ b/registry/templates/admin/index.html @@ -34,7 +34,7 @@ {{ block.super }} -<div style="width:100%;float:left;padding-top:0.5rem;margin-top:0.5rem;border-top:1px solid var(--hairline-color)"> +<div style="width:100%;float:left;padding-top:0.5rem;margin-top:0.5rem;border-top:1px solid var(--hairline-color)"> <h2>Tvá oprávnění</h2> <ul> diff --git a/shared/models.py b/shared/models.py index ee10b8b8e3b8e01efdbdf4e251b94b37c35863a2..5d05557685904fabca030c8c7c48c4902b719f0a 100644 --- a/shared/models.py +++ b/shared/models.py @@ -1,5 +1,7 @@ class NameStrMixin: - name = "" + @property + def name(self): + raise NotImplementedError def __str__(self) -> str: return self.name diff --git a/users/models.py b/users/models.py index aa19469e93ee0a716fe8f6a06512c945cdced777..83f21bfc393d3c21aa0790ff0854f06b246fa5e4 100644 --- a/users/models.py +++ b/users/models.py @@ -90,15 +90,12 @@ class User(pirates_models.AbstractUser): def get_all_permissions_ordered(self, obj=None) -> list: if not self.is_superuser: permissions = ( - Permission. - objects. - filter( - models.Q(group__user=self) | - models.Q(user=self) - ). - order_by("content_type__app_label"). - distinct(). - all() + Permission.objects.filter( + models.Q(group__user=self) | models.Q(user=self) + ) + .order_by("content_type__app_label") + .distinct() + .all() ) else: permissions = Permission.objects.order_by("content_type__app_label").all()