diff --git a/contracts/admin.py b/contracts/admin.py index 25550d30965ca85d038b173c20351ca4f1a17004..ba5f4fd6213308dd772f3e510a5fb7634dd8cfef 100644 --- a/contracts/admin.py +++ b/contracts/admin.py @@ -119,6 +119,7 @@ class ContractFileAdmin( ParentContractApprovedPermissionsMixin, ParentContractOwnPermissionsMixin, ): + exclude = ("is_auto_imported",) form = ContractFileAdminForm @@ -186,6 +187,7 @@ class ContracteeSignatureRepresentativeInline( class ContracteeSignatureInline(ParentContractInlineMixin, NestedStackedInline): model = ContracteeSignature autocomplete_fields = ("contractee",) + exclude = ("is_auto_imported",) inlines = (ContracteeSignatureRepresentativeInline,) extra = 0 @@ -216,12 +218,14 @@ class SigneeSignatureRepresentativeInline( class SigneeSignatureInline(ParentContractInlineMixin, NestedStackedInline): model = SigneeSignature autocomplete_fields = ("signee",) + exclude = ("is_auto_imported",) inlines = (SigneeSignatureRepresentativeInline,) extra = 0 class ContractFileInline(ParentContractInlineMixin, NestedTabularInline): model = ContractFile + exclude = ("is_auto_imported",) form = ContractFileAdminForm extra = 0 @@ -669,16 +673,19 @@ class ContractAdmin( class ContractTypeAdmin(MarkdownxGuardedModelAdmin): model = ContractType + exclude = ("is_auto_imported",) search_fields = ("name",) class ContractIssueAdmin(MarkdownxGuardedModelAdmin): model = ContractIssue + exclude = ("is_auto_imported",) search_fields = ("name",) class ContractFilingAreaAdmin(MarkdownxGuardedModelAdmin): model = ContractFilingArea + exclude = ("is_auto_imported",) search_fields = ( "name", "person_responsible", diff --git a/contracts/management/commands/import_old_contracts.py b/contracts/management/commands/import_old_contracts.py index e714d34b796d7cbd44726890568d7dc72b189ade..67215c8321e968dd81099cab4d1bd5d2ac0db2b8 100644 --- a/contracts/management/commands/import_old_contracts.py +++ b/contracts/management/commands/import_old_contracts.py @@ -86,7 +86,7 @@ class Command(BaseCommand): issue.delete() else: - issue = ContractIssue(name=name) + issue = ContractIssue(name=name, is_auto_imported=True) issue.save() return issue @@ -172,18 +172,18 @@ class Command(BaseCommand): patterns = ( (r"\s\s+", " "), - (r"^KraskĂ© sdruĹľenĂ Praha$", "KrajskĂ© sdruĹľenĂ Praha"), + (r"^KraskĂ© sdruĹľenĂ Praha$", "KS Praha"), (r"^republikovĂ© pĹ™edsednictvo$", "RepublikovĂ© pĹ™edsednictvo"), - (r"^KS ", "KrajskĂ© sdruĹľenĂ "), - (r"^(MS |mĂstnĂ sdruĹľenĂ )", "MĂstnĂ sdruĹľenĂ "), - (r"^(ĂšsteckĂ˝ kraj|UsteckĂ˝ kraj)$", "KrajskĂ© sdruĹľenĂ ĂšsteckĂ˝ kraj"), + (r"^KS ", "KS "), + (r"^(MS |mĂstnĂ sdruĹľenĂ )", "MS "), + (r"^(ĂšsteckĂ˝ kraj|UsteckĂ˝ kraj)$", "KS ĂšsteckĂ˝ kraj"), ( r"^MoravskoslezskĂ˝ kraj$", - "KrajskĂ© sdruĹľenĂ MoravskoslezskĂ˝ kraj", + "KS MoravskoslezskĂ˝ kraj", ), ( r"^KarlovarskĂ˝ kraj$", - "KrajskĂ© sdruĹľenĂ KarlovarskĂ˝ kraj", + "KS KarlovarskĂ˝ kraj", ), ( r"JihoÄŤeská kraj", @@ -208,21 +208,23 @@ class Command(BaseCommand): (r"olomouckĂ˝", "OlomouckĂ˝"), (r"^mĂstnĂ ", "MĂstnĂ "), (r"^celostátnĂ ", "CelostátnĂ "), - (r"odbor", "Odbor"), + (r"(o|O)dbor", "odbor"), (r"PKS", "PĹ™edsednictvo krajskĂ©ho sdruĹľenĂ"), (r"( KS | KrajskĂ©ho sdruĹľenĂ )", " krajskĂ©ho sdruĹľenĂ "), ( r"^(PĹ™edsednictvo krajskĂ©ho sdruĹľenĂ |PĹ™edsednictvo |MĂstnĂ pĹ™edsednictvo )", "", ), - (r"^KrajskĂ© pĹ™edsednictvo ", "KrajskĂ© sdruĹľenĂ "), + (r"^KrajskĂ© pĹ™edsednictvo", "KS"), (r"Ă©ho kraje$", "Ă˝ kraj"), - (r"^Olomouc$", "MĂstnĂ sdruĹľenĂ Olomouc"), - (r"^OlomouckĂ˝ kraj$", "KrajskĂ© sdruĹľenĂ OlomouckĂ˝ kraj"), - (r"^PardubickĂ˝ kraj$", "KrajskĂ© sdruĹľenĂ PardubickĂ˝ kraj"), - (r"^JihoÄŤeskĂ˝ kraj$", "KrajskĂ© sdruĹľenĂ JihoÄŤeskĂ˝ kraj"), - (r"^KrálovehradeckĂ˝ kraj$", "KrajskĂ© sdruĹľenĂ KrálovehradeckĂ˝ kraj"), - (r"^PardubickĂ˝ kraj$", "KrajskĂ© sdruĹľenĂ PardubickĂ˝ kraj"), + (r"^Olomouc$", "MS Olomouc"), + (r"^OlomouckĂ˝ kraj$", "KS OlomouckĂ˝ kraj"), + (r"^PardubickĂ˝ kraj$", "KS PardubickĂ˝ kraj"), + (r"^JihoÄŤeskĂ˝ kraj$", "KS JihoÄŤeskĂ˝ kraj"), + (r"^KrálovehradeckĂ˝ kraj$", "KS KrálovehradeckĂ˝ kraj"), + (r"^PardubickĂ˝ kraj$", "KS PardubickĂ˝ kraj"), + (r"^KrajskĂ© sdruĹľenĂ", "KS"), + (r"^MĂstnĂ sdruĹľenĂ", "MS"), ) for pattern in patterns: @@ -376,7 +378,7 @@ class Command(BaseCommand): def assign_signing_party_metadata( self, slug: str, contract: Contract, signing_party: dict ) -> tuple[ - Contract | Signee, + Contractee | Signee, list[ContractIssue], list[ContracteeSignatureRepresentative | SigneeSignatureRepresentative], bool, @@ -631,12 +633,14 @@ class Command(BaseCommand): ): model = Contractee representative_model = ContracteeSignatureRepresentative - instance = model() + instance = model(is_auto_imported=True) is_contractee = True else: model = Signee representative_model = SigneeSignatureRepresentative - instance = model(name=name, address_country="ÄŚeská republika") + instance = model( + name=name, is_auto_imported=True, address_country="ÄŚeská republika" + ) if model is Signee: if ( @@ -1083,7 +1087,9 @@ class Command(BaseCommand): try: type_instance = ContractType.objects.get(name=value) except ContractType.DoesNotExist: - type_instance = ContractType(name=value) + type_instance = ContractType( + is_auto_imported=True, name=value + ) types.append(type_instance) @@ -1232,6 +1238,7 @@ class Command(BaseCommand): except ContractFilingArea.DoesNotExist: if isinstance(value, str) and not value.startswith("Neznám"): filing_area = ContractFilingArea( + is_auto_imported=True, name=value, person_responsible="DoplĹ osobu!", ) @@ -1385,6 +1392,7 @@ class Command(BaseCommand): with open(file_path, "rb") as open_file: self.normalization_count += 1 file = ContractFile( + is_auto_imported=True, contract=contract, name=self.normalize_filename(file_key), is_public=True, @@ -1428,6 +1436,7 @@ class Command(BaseCommand): contractee.save() signature = ContracteeSignature( + is_auto_imported=True, contract=contract, contractee=contractee, date=contract.valid_start_date, @@ -1445,6 +1454,7 @@ class Command(BaseCommand): signee.save() signature = SigneeSignature( + is_auto_imported=True, contract=contract, signee=signee, date=contract.valid_start_date, @@ -1471,7 +1481,7 @@ class Command(BaseCommand): def import_contract_from_files( self, contract_root: str, files: list[str], valid_start_date: datetime ) -> None: - contract = Contract(notes="") + contract = Contract(is_auto_imported=True, notes="") for file_ in files: with open( @@ -1635,7 +1645,7 @@ class Command(BaseCommand): Signee, SigneeSignature, ): - model.objects.filter().delete() + model.objects.filter(is_auto_imported=True).delete() if self.verbosity >= 1: self.stdout.write(self.style.SUCCESS("Deleted all previous records.")) diff --git a/contracts/migrations/0072_alter_signeehistoricalname_options_and_more.py b/contracts/migrations/0072_alter_signeehistoricalname_options_and_more.py new file mode 100644 index 0000000000000000000000000000000000000000..487eeb51170838d72d3d4b3697bd1ce065433b53 --- /dev/null +++ b/contracts/migrations/0072_alter_signeehistoricalname_options_and_more.py @@ -0,0 +1,82 @@ +# Generated by Django 5.1.1 on 2024-09-26 12:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("contracts", "0071_signeehistoricalname"), + ] + + operations = [ + migrations.AlterModelOptions( + name="signeehistoricalname", + options={ + "verbose_name": "HistorickĂ© jmĂ©no smluvnĂ strany", + "verbose_name_plural": "Historická jmĂ©na smluvnĂ strany", + }, + ), + migrations.AddField( + model_name="contract", + name="is_auto_imported", + field=models.BooleanField( + default=False, verbose_name="Je automaticky importovaná" + ), + ), + migrations.AddField( + model_name="contractee", + name="is_auto_imported", + field=models.BooleanField( + default=False, verbose_name="Je automaticky importovaná" + ), + ), + migrations.AddField( + model_name="contracteesignature", + name="is_auto_imported", + field=models.BooleanField( + default=False, verbose_name="Je automaticky importovaná" + ), + ), + migrations.AddField( + model_name="contractfile", + name="is_auto_imported", + field=models.BooleanField( + default=False, verbose_name="Je automaticky importovaná" + ), + ), + migrations.AddField( + model_name="contractfilingarea", + name="is_auto_imported", + field=models.BooleanField( + default=False, verbose_name="Je automaticky importovaná" + ), + ), + migrations.AddField( + model_name="contractissue", + name="is_auto_imported", + field=models.BooleanField( + default=False, verbose_name="Je automaticky importovaná" + ), + ), + migrations.AddField( + model_name="contracttype", + name="is_auto_imported", + field=models.BooleanField( + default=False, verbose_name="Je automaticky importovaná" + ), + ), + migrations.AddField( + model_name="signee", + name="is_auto_imported", + field=models.BooleanField( + default=False, verbose_name="Je automaticky importovaná" + ), + ), + migrations.AddField( + model_name="signeesignature", + name="is_auto_imported", + field=models.BooleanField( + default=False, verbose_name="Je automaticky importovaná" + ), + ), + ] diff --git a/contracts/models.py b/contracts/models.py index 539390151659d5580fded55299315ae8be27b9c3..5f9164548cb8d3775f0987833d98434d8a3054f0 100644 --- a/contracts/models.py +++ b/contracts/models.py @@ -121,6 +121,11 @@ class Signee( InlineNameMixin, models.Model, ): + is_auto_imported = models.BooleanField( + "Je automaticky importovaná", + default=False, + ) + name = models.CharField( max_length=256, verbose_name="JmĂ©no", @@ -338,6 +343,11 @@ class Contractee( InlineNameMixin, models.Model, ): + is_auto_imported = models.BooleanField( + "Je automaticky importovaná", + default=False, + ) + name = models.CharField( max_length=256, default=get_default_contractee_name, @@ -414,6 +424,11 @@ class Contractee( class ContractType(ContractCountMixin, NameStrMixin, models.Model): + is_auto_imported = models.BooleanField( + "Je automaticky importovaná", + default=False, + ) + name = models.CharField( max_length=256, verbose_name="JmĂ©no", @@ -433,6 +448,11 @@ class ContractType(ContractCountMixin, NameStrMixin, models.Model): class ContractIssue(ContractCountMixin, NameStrMixin, models.Model): + is_auto_imported = models.BooleanField( + "Je automaticky importovaná", + default=False, + ) + name = models.CharField( max_length=256, verbose_name="JmĂ©no", @@ -452,6 +472,11 @@ class ContractIssue(ContractCountMixin, NameStrMixin, models.Model): class ContractFilingArea(ContractCountMixin, NameStrMixin, models.Model): + is_auto_imported = models.BooleanField( + "Je automaticky importovaná", + default=False, + ) + name = models.CharField( max_length=256, verbose_name="JmĂ©no", @@ -486,6 +511,11 @@ get_created_on_timestamp = get_current_utc_timestamp class Contract(NameStrMixin, models.Model): # BEGIN Automatically set fields + is_auto_imported = models.BooleanField( + "Je automaticky importovaná", + default=False, + ) + created_by = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, @@ -952,6 +982,11 @@ class ContractFileField(models.FileField): class ContractFile(NameStrMixin, models.Model): + is_auto_imported = models.BooleanField( + "Je automaticky importovaná", + default=False, + ) + name = models.CharField( max_length=256, verbose_name="JmĂ©no", @@ -988,6 +1023,11 @@ class ContractFile(NameStrMixin, models.Model): class ContracteeSignature(models.Model): + is_auto_imported = models.BooleanField( + "Je automaticky importovaná", + default=False, + ) + contractee = models.ForeignKey( Contractee, on_delete=models.CASCADE, @@ -1028,6 +1068,11 @@ class ContracteeSignature(models.Model): class SigneeSignature(models.Model): + is_auto_imported = models.BooleanField( + "Je automaticky importovaná", + default=False, + ) + signee = models.ForeignKey( Signee, on_delete=models.CASCADE,