diff --git a/contracts/admin.py b/contracts/admin.py index 5f218830333aefd679dd8305740aef508b367d46..eaa45096116f3e0a5a89faf083b2a6347420e360 100644 --- a/contracts/admin.py +++ b/contracts/admin.py @@ -155,6 +155,12 @@ class ContractAdmin(MarkdownxGuardedModelAdmin, FieldsetsInlineMixin, NestedMode ), ] + def get_form(self, request, *args, **kwargs) -> ContractAdminForm: + form = super().get_form(request, *args, **kwargs) + form.current_user = request.user + + return form + def get_fieldsets(self, request, obj=None): fieldsets_with_inlines = copy.deepcopy(self.fieldsets_with_inlines) diff --git a/contracts/forms.py b/contracts/forms.py index 78ae1647a66d6ae5af05645d30e6ccfddb693efa..9453e761d5ee1afb7eb34004eb66bb6f718132ee 100644 --- a/contracts/forms.py +++ b/contracts/forms.py @@ -6,6 +6,25 @@ from .models import Contract, ContracteeSignature, SigneeSignature class ContractAdminForm(forms.ModelForm): + def clean(self): + clean_data = super().clean() + + if ( + not self.current_user.is_superuser + and self.instance.is_approved + is not clean_data.get("is_approved", self.instance.is_approved) + and self.current_user == self.instance.created_by + ): + raise ValidationError( + { + "is_approved": ( + "Smlouva nemůže být schválena uživatelem, " "který ji nahrál." + ) + } + ) + + return clean_data + class Media: js = ( "shared/runtime.js", diff --git a/contracts/migrations/0014_alter_contracteesignaturerepresentative_options_and_more.py b/contracts/migrations/0014_alter_contracteesignaturerepresentative_options_and_more.py new file mode 100644 index 0000000000000000000000000000000000000000..bedf1c508e3372a2011b766839d8c93c57c3545a --- /dev/null +++ b/contracts/migrations/0014_alter_contracteesignaturerepresentative_options_and_more.py @@ -0,0 +1,37 @@ +# Generated by Django 4.1.4 on 2023-03-24 15:34 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("contracts", "0013_alter_contractee_address_country_and_more"), + ] + + operations = [ + migrations.AlterModelOptions( + name="contracteesignaturerepresentative", + options={ + "verbose_name": "Zástupce naší smluvní strany", + "verbose_name_plural": "Zástupci naší smluvní strany", + }, + ), + migrations.AlterModelOptions( + name="signeesignaturerepresentative", + options={ + "verbose_name": "Zástupce jiné smluvní strany", + "verbose_name_plural": "Zástupci jiné smluvní strany", + }, + ), + migrations.AlterField( + model_name="signeesignaturerepresentative", + name="signee_signature", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="representatives", + to="contracts.signeesignature", + verbose_name="Podpis jiné smluvní strany", + ), + ), + ] diff --git a/contracts/models.py b/contracts/models.py index e2589a9522fbf0bef8fc414d33457e30057237c9..33d8c9fb46d1c53b9bbe95db94c8f0d38ccdc358 100644 --- a/contracts/models.py +++ b/contracts/models.py @@ -663,8 +663,8 @@ class ContracteeSignatureRepresentative(RepresentativeMixin, models.Model): class Meta: app_label = "contracts" - verbose_name = "Zástupce" - verbose_name_plural = "Zástupci" + verbose_name = "Zástupce naší smluvní strany" + verbose_name_plural = "Zástupci naší smluvní strany" class SigneeSignatureRepresentative(RepresentativeMixin, models.Model): @@ -672,7 +672,7 @@ class SigneeSignatureRepresentative(RepresentativeMixin, models.Model): SigneeSignature, on_delete=models.CASCADE, related_name="representatives", - verbose_name="Podpis druhé smluvní strany", + verbose_name="Podpis jiné smluvní strany", ) name = models.CharField( @@ -690,8 +690,8 @@ class SigneeSignatureRepresentative(RepresentativeMixin, models.Model): class Meta: app_label = "contracts" - verbose_name = "Zástupce" - verbose_name_plural = "Zástupci" + verbose_name = "Zástupce jiné smluvní strany" + verbose_name_plural = "Zástupci jiné smluvní strany" @receiver(post_save, sender=ContracteeSignature)