diff --git a/contracts/admin.py b/contracts/admin.py index 52dda10b074c514d754db0c16bd871247072ab74..6240321f3915855db68e73736d8e7e89f068c3f0 100644 --- a/contracts/admin.py +++ b/contracts/admin.py @@ -314,7 +314,6 @@ class ContractAdmin( def save_model(self, request, obj, form, change): is_new = obj.created_by is None - print(is_new) # Need to generate primary keys first parent_save_response = super().save_model(request, obj, form, change) @@ -338,7 +337,7 @@ class ContractAdmin( from users.models import User headers = { - "Authorization": f"Token {settings.NASTENKA_API_TOKEN}", + "Authorization": f"Token {Contract.settings.nastenka_api_key}", "Content-Type": "application/json", } @@ -361,11 +360,17 @@ class ContractAdmin( } ), headers=headers, - ).raise_for_status() + ) + + notice.raise_for_status() + notice = notice.json() + + obj.work_in_progress_nastenka_notice_id = uuid.UUID(notice["id"]) + obj.save() if obj.after_approval_nastenka_notice_id is not None: - requests.delete( - f"{settings.NASTENKA_API_URL}/{obj.after_approval_nastenka_notice_id}", + requests.post( + f"{settings.NASTENKA_API_URL}/{obj.after_approval_nastenka_notice_id}/all-hidden", headers=headers, ).raise_for_status() @@ -373,8 +378,8 @@ class ContractAdmin( obj.save() if obj.to_be_approved_nastenka_notice_id is not None: - requests.delete( - f"{settings.NASTENKA_API_URL}/{obj.to_be_approved_nastenka_notice_id}", + requests.post( + f"{settings.NASTENKA_API_URL}/{obj.to_be_approved_nastenka_notice_id}/all-hidden", headers=headers, ).raise_for_status() @@ -390,7 +395,9 @@ class ContractAdmin( try: sso_ids = [] - for user in User.objects.filter(is_staff=True).all(): + for user in User.objects.filter( + models.Q(is_staff=True) & ~models.Q(sso_id="") + ).all(): if user.has_perm("contracts.approve"): sso_ids.append(user.sso_id) @@ -416,6 +423,15 @@ class ContractAdmin( obj.to_be_approved_nastenka_notice_id = uuid.UUID(notice["id"]) obj.save() + + if obj.work_in_progress_nastenka_notice_id is not None: + requests.post( + f"{settings.NASTENKA_API_URL}/{obj.work_in_progress_nastenka_notice_id}/all-hidden", + headers=headers, + ).raise_for_status() + + obj.work_in_progress_nastenka_notice_id = None + obj.save() except Exception as exception: logger.error( 'Failed to send out notice "to be approved" NástÄ›nka notification: %s', @@ -449,8 +465,8 @@ class ContractAdmin( obj.save() if obj.to_be_approved_nastenka_notice_id is not None: - requests.delete( - f"{settings.NASTENKA_API_URL}/{obj.to_be_approved_nastenka_notice_id}", + requests.post( + f"{settings.NASTENKA_API_URL}/{obj.to_be_approved_nastenka_notice_id}/all-hidden", headers=headers, ).raise_for_status() @@ -489,8 +505,8 @@ class ContractAdmin( obj.save() if obj.to_be_approved_nastenka_notice_id is not None: - requests.delete( - f"{settings.NASTENKA_API_URL}/{obj.to_be_approved_nastenka_notice_id}", + requests.post( + f"{settings.NASTENKA_API_URL}/{obj.to_be_approved_nastenka_notice_id}/all-hidden", headers=headers, ).raise_for_status() diff --git a/contracts/management/commands/import_old_contracts.py b/contracts/management/commands/import_old_contracts.py index 312f62523f4e3f7efd5d8020d72702f44fe87081..ea613d292639a2e8ae8eb34d500b75071293df71 100644 --- a/contracts/management/commands/import_old_contracts.py +++ b/contracts/management/commands/import_old_contracts.py @@ -10,9 +10,8 @@ from django.conf import settings from django.core.files import File from django.core.management.base import BaseCommand from django.db import models -from postal.parser import parse_address - from git import Repo +from postal.parser import parse_address from ...models import ( Contract, diff --git a/contracts/migrations/0068_contract_after_approval_nastenka_notice_id.py b/contracts/migrations/0068_contract_after_approval_nastenka_notice_id.py index b72787e93a751b8e76b8ca40ad24d0aa0e85970d..265f5dae87561a75bdfbe42acde0a07f27f908b1 100644 --- a/contracts/migrations/0068_contract_after_approval_nastenka_notice_id.py +++ b/contracts/migrations/0068_contract_after_approval_nastenka_notice_id.py @@ -4,15 +4,18 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ - ('contracts', '0067_alter_contractee_options_alter_signee_options'), + ("contracts", "0067_alter_contractee_options_alter_signee_options"), ] operations = [ migrations.AddField( - model_name='contract', - name='after_approval_nastenka_notice_id', - field=models.UUIDField(blank=True, null=True, verbose_name='ID oznámenĂ o schválenĂ / vrácenĂ v NástÄ›nce'), + model_name="contract", + name="after_approval_nastenka_notice_id", + field=models.UUIDField( + blank=True, + null=True, + verbose_name="ID oznámenĂ o schválenĂ / vrácenĂ v NástÄ›nce", + ), ), ] diff --git a/contracts/migrations/0069_contract_work_in_progress_nastenka_notice_id_and_more.py b/contracts/migrations/0069_contract_work_in_progress_nastenka_notice_id_and_more.py new file mode 100644 index 0000000000000000000000000000000000000000..fbaf08ee0ba70939ab715810d8c8d782634708ec --- /dev/null +++ b/contracts/migrations/0069_contract_work_in_progress_nastenka_notice_id_and_more.py @@ -0,0 +1,30 @@ +# Generated by Django 4.1.4 on 2023-09-19 20:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("contracts", "0068_contract_after_approval_nastenka_notice_id"), + ] + + operations = [ + migrations.AddField( + model_name="contract", + name="work_in_progress_nastenka_notice_id", + field=models.UUIDField( + blank=True, + null=True, + verbose_name="ID oznámenĂ o vrácenĂ k ĂşpravÄ› v NástÄ›nce", + ), + ), + migrations.AlterField( + model_name="contract", + name="after_approval_nastenka_notice_id", + field=models.UUIDField( + blank=True, + null=True, + verbose_name="ID oznámenĂ o schválenĂ / zamĂtnutĂ v NástÄ›nce", + ), + ), + ] diff --git a/contracts/models.py b/contracts/models.py index 17e70ac546e7657d59909a2e826786390f4e8384..185427b4933124926dc57318ad4651ea4293c6c2 100644 --- a/contracts/models.py +++ b/contracts/models.py @@ -698,10 +698,16 @@ class Contract(NameStrMixin, models.Model): blank=True, null=True, verbose_name="ID oznámenĂ o novĂ© smlouvÄ› v NástÄ›nce" ) + work_in_progress_nastenka_notice_id = models.UUIDField( + blank=True, + null=True, + verbose_name="ID oznámenĂ o vrácenĂ k ĂşpravÄ› v NástÄ›nce", + ) + after_approval_nastenka_notice_id = models.UUIDField( blank=True, null=True, - verbose_name="ID oznámenĂ o schválenĂ / vrácenĂ v NástÄ›nce", + verbose_name="ID oznámenĂ o schválenĂ / zamĂtnutĂ v NástÄ›nce", ) @property diff --git a/contracts/settings.py b/contracts/settings.py index 8cd2d5094713961a15a14753ae3551e984fb2a0a..922e5868144c3808c2db247aeef73cf796822920 100644 --- a/contracts/settings.py +++ b/contracts/settings.py @@ -8,3 +8,5 @@ class ContractSettings(dbsettings.Group): help_text="Poporuje formátovánĂ skrze Markdown.", widget=forms.Textarea, ) + + nastenka_api_key = dbsettings.StringValue("API Token pro NástÄ›nku") diff --git a/package-lock.json b/package-lock.json index b57b2e441884312be7b106c23e62d1eb89ff4d60..183b077861cd802e4c5b5fcbbe52b574521b29f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1663,9 +1663,9 @@ } }, "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3336,9 +3336,9 @@ } }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } diff --git a/registry/settings/base.py b/registry/settings/base.py index 083ea5daaec5c902ccb547a016d8c31cfc85f372..469be13ad6868643f5af215d925d306005d87211 100644 --- a/registry/settings/base.py +++ b/registry/settings/base.py @@ -201,7 +201,10 @@ USE_X_FORWARDED_HOST = True SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https") X_FRAME_OPTIONS = "SAMEORIGIN" -SILENCED_SYSTEM_CHECKS = ["security.W019"] +SILENCED_SYSTEM_CHECKS = [ + "security.W019", + "auth.W004", +] ## Admin @@ -247,7 +250,7 @@ if SENTRY_DSN != "": ## App-specific -NASTENKA_API_URL = env.str("NASTENKA_API_URL") +NASTENKA_API_URL = "http://localhost:8009/contracts/api/notices" NASTENKA_API_TOKEN = env.str("NASTENKA_API_TOKEN") DEFAULT_CONTRACTEE_NAME = env.str("DEFAULT_CONTRACTEE_NAME")