diff --git a/contracts/management/commands/import_old_contracts.py b/contracts/management/commands/import_old_contracts.py index 36a3b9e416f290261f1736fd9e15495626ec8f46..d2fafd01efce80a7967a22edb1984e9eb8b7b81a 100644 --- a/contracts/management/commands/import_old_contracts.py +++ b/contracts/management/commands/import_old_contracts.py @@ -74,11 +74,20 @@ class Command(BaseCommand): help="Purge all previous contracts, types and filing areas before the import.", ) - def use_issue(self, contract, name: str) -> None: - try: - issue = ContractIssue.objects.get(name=name) - except ContractIssue.DoesNotExist: + def use_issue(self, name: str) -> None: + issues = ContractIssue.objects.filter(name=name).all() + + if len(issues) != 0: + issue = issues[0] + elif len(issues) > 1: + for issue in issues[1:]: + for contract in issue.contracts: + contract.issues.add(issue) + + issue.delete() + else: issue = ContractIssue(name=name) + issue.save() return issue @@ -385,7 +394,7 @@ class Command(BaseCommand): contract.notes += ( f"Nepojmenovaná smluvní strana, zdrojová data: {signing_party}\n" ) - issues.append(self.use_issue(contract, "Špatně pojmenovaná smluvní strana")) + issues.append(self.use_issue("Špatně pojmenovaná smluvní strana")) if self.verbosity >= 2: self.stderr.write( @@ -473,9 +482,7 @@ class Command(BaseCommand): issue_count += 1 contract.notes += f"Špatně zadané sídlo smluvní strany: {signing_party_value}\n" issues.append( - self.use_issue( - contract, "Špatně zadané sídlo smluvní strany" - ) + self.use_issue("Špatně zadané sídlo smluvní strany") ) if self.verbosity >= 2: @@ -537,7 +544,7 @@ class Command(BaseCommand): f"Špatně zadané IČO smluvní strany: {signing_party_value}\n" ) issues.append( - self.use_issue(contract, "Špatně zadané IČO smluvní strany") + self.use_issue("Špatně zadané IČO smluvní strany") ) if self.verbosity >= 2: @@ -555,9 +562,7 @@ class Command(BaseCommand): issue_count += 1 contract.notes += f"Špatně zadaný zástupce smluvní strany: {signing_party_value}\n" issues.append( - self.use_issue( - contract, "Špatně zadaný zástupce smluvní strany" - ) + self.use_issue("Špatně zadaný zástupce smluvní strany") ) if self.verbosity >= 2: @@ -583,10 +588,7 @@ 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( - contract, - "Špatně zadaná funkce zástupce smluvní strany", - ) + self.use_issue("Špatně zadaná funkce zástupce smluvní strany") ) if self.verbosity >= 2: @@ -606,10 +608,7 @@ 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( - contract, - "Špatně zadaný zástupce smluvní strany", - ) + self.use_issue("Špatně zadaný zástupce smluvní strany") ) if self.verbosity >= 2: @@ -633,9 +632,7 @@ class Command(BaseCommand): issue_count += 1 contract.notes += f"Špatně zadaný orgán smluvní strany: {signing_party_value}\n" issues.append( - self.use_issue( - contract, "Špatně zadaný orgán smluvní strany" - ) + self.use_issue("Špatně zadaný orgán smluvní strany") ) if self.verbosity >= 2: @@ -783,7 +780,7 @@ class Command(BaseCommand): observed_issues_count += 1 contract.notes += f"Špatně zadaný začátek platnosti: {value}\n" issues.append( - self.use_issue(contract, "Špatně zadaný začátek platnosti") + self.use_issue("Špatně zadaný začátek platnosti") ) if self.verbosity >= 2: @@ -802,7 +799,7 @@ class Command(BaseCommand): observed_issues_count += 1 contract.notes += f"Špatně zadaný konec platnosti: {value}\n" issues.append( - self.use_issue(contract, "Špatně zadaný konec platnosti") + self.use_issue("Špatně zadaný konec platnosti") ) if self.verbosity >= 2: @@ -839,7 +836,7 @@ class Command(BaseCommand): elif not isinstance(value, list): observed_issues_count += 1 contract.notes += f"Špatně zadané typy: {value}\n" - issues.append(self.use_issue(contract, "Špatně zadané typy")) + issues.append(self.use_issue("Špatně zadané typy")) if self.verbosity >= 2: self.stderr.write( @@ -854,7 +851,7 @@ class Command(BaseCommand): if not isinstance(type_name, str): observed_issues_count += 1 contract.notes += f"Špatně zadaný typ: {type_name}\n" - issues.append(self.use_issue(contract, "Špatně zadaný typ")) + issues.append(self.use_issue("Špatně zadaný typ")) if self.verbosity >= 2: self.stderr.write( @@ -896,7 +893,7 @@ class Command(BaseCommand): else: observed_issues_count += 1 contract.notes += f"Neznámý stav: {value}\n" - issues.append(self.use_issue(contract, "Neznámý právní stav")) + issues.append(self.use_issue("Neznámý právní stav")) if self.verbosity >= 2: self.stderr.write( @@ -918,7 +915,7 @@ class Command(BaseCommand): f"Původní, špatně zadané náklady: {value}\n" ) issues.append( - self.use_issue(contract, "Špatně zadané náklady") + self.use_issue("Špatně zadané náklady") ) if self.verbosity >= 2: @@ -948,7 +945,7 @@ class Command(BaseCommand): observed_issues_count += 1 contract.notes += f"Původní, neropoznané náklady: {value}\n" issues.append( - self.use_issue(contract, "Špatně zadané náklady") + self.use_issue("Špatně zadané náklady") ) if self.verbosity >= 2: @@ -965,7 +962,7 @@ class Command(BaseCommand): elif value not in (None, "0"): observed_issues_count += 1 contract.notes += f"Původní, neropoznané náklady: {value}\n" - issues.append(self.use_issue(contract, "Špatně zadané náklady")) + issues.append(self.use_issue("Špatně zadané náklady")) if self.verbosity >= 2: self.stderr.write( @@ -991,7 +988,7 @@ class Command(BaseCommand): observed_issues_count += 1 contract.notes += f"Špatně zadaná spisovna: {value}\n" issues.append( - self.use_issue(contract, "Špatně zadaná spisovna") + self.use_issue("Špatně zadaná spisovna") ) if self.verbosity >= 2: @@ -1007,7 +1004,7 @@ class Command(BaseCommand): f"Špatně zadané smluvní strany, nejsou seznam: {value}\n" ) issues.append( - self.use_issue(contract, "Špatně zadaný smluvní strany") + self.use_issue("Špatně zadaný smluvní strany") ) if self.verbosity >= 2: @@ -1026,7 +1023,7 @@ class Command(BaseCommand): f"Špatně zadaná smluvní strana: {signing_party}\n" ) issues.append( - self.use_issue(contract, "Špatně zadaná smluvní strana") + self.use_issue("Špatně zadaná smluvní strana") ) if self.verbosity >= 2: @@ -1062,7 +1059,7 @@ class Command(BaseCommand): if not isinstance(value, list): observed_issues_count += 1 contract.notes += f"Špatně zadané soubory.\n" - issues.append(self.use_issue(contract, "Špatně zadané soubory")) + issues.append(self.use_issue("Špatně zadané soubory")) if self.verbosity >= 2: self.stderr.write( @@ -1073,6 +1070,8 @@ class Command(BaseCommand): continue + at_least_one_incorrect_filename = False + for file_data in value: if not isinstance(file_data, dict): observed_issues_count += 1 @@ -1080,9 +1079,7 @@ class Command(BaseCommand): f"Špatně zadané informace o souboru: {file_data}.\n" ) issues.append( - self.use_issue( - contract, "Špatně zadané informace o souboru" - ) + self.use_issue("Špatně zadané informace o souboru") ) if self.verbosity >= 2: @@ -1103,9 +1100,11 @@ class Command(BaseCommand): if not isinstance(file_value, str): observed_issues_count += 1 contract.notes += f"Špatně zadaný název souboru {file_key}: {file_value}.\n" - issues.append( - self.use_issue(contract, "Neplatný název souboru") - ) + + if not at_least_one_incorrect_filename: + issues.append( + self.use_issue("Neplatný název souboru") + ) if self.verbosity >= 2: self.stderr.write( @@ -1114,6 +1113,8 @@ class Command(BaseCommand): ) ) + at_least_one_incorrect_filename = True + continue file_path = os.path.join(contract_root, file_value) @@ -1124,7 +1125,7 @@ class Command(BaseCommand): f"Neexistující soubor: {file_value}.\n" ) issues.append( - self.use_issue(contract, "Neexistující soubor") + self.use_issue("Neexistující soubor") ) if self.verbosity >= 2: @@ -1215,9 +1216,6 @@ class Command(BaseCommand): for file in files: file.save() - for issue in issues: - issue.save() - contract.filing_area = filing_area contract.types.set(types) contract.issues.set(issues) @@ -1385,6 +1383,7 @@ class Command(BaseCommand): Contract, ContractType, ContractFilingArea, + ContractIssue, ContractFile, Contractee, ContracteeSignature, diff --git a/registry/templates/admin/index.html b/registry/templates/admin/index.html index 27a456266339ad636a0e7ad4c7948440329aa5fe..834866cf238c91b8f6a64496c0e198221679e69c 100644 --- a/registry/templates/admin/index.html +++ b/registry/templates/admin/index.html @@ -29,3 +29,19 @@ {{ block.super }} {% endblock %} + +{% block sidebar %} + +{{ block.super }} + +<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> + {% for permission in request.user.get_all_permissions_ordered %} + <li>{{ permission }}</li> + {% endfor %} + </ul> +</div> + +{% endblock %} diff --git a/users/models.py b/users/models.py index 64dee9b879678b89f0304418b428213490a116b4..99f97b6a47a6759f990b35ec7ee6c51caf08895f 100644 --- a/users/models.py +++ b/users/models.py @@ -1,5 +1,6 @@ from django.conf import settings from django.contrib.auth.models import Group as AuthGroup +from django.contrib.auth.models import Permission from django.db import models from pirates import models as pirates_models @@ -86,6 +87,28 @@ class User(pirates_models.AbstractUser): return f"{first_name}{self.last_name}" + def get_all_permissions_ordered(self, obj=None) -> list: + #permissions_set = self.get_all_permissions(obj) + + #print(permissions_set) + + if not self.is_superuser: + permissions = ( + Permission. + objects. + filter( + models.Q(content_type__name=self.groups.all()) | + models.Q(user=self) + ). + order_by("content_type__app_label"). + distinct(). + all() + ) + else: + permissions = Permission.objects.order_by("content_type__app_label").all() + + return permissions + def save(self, *args, saved_by_auth: bool = False, **kwargs): if ( not self._state.adding