Esempio n. 1
0
    def update(self, instance: TagVersion, validated_data):
        structures = validated_data.pop('structures', [])
        notes_data = validated_data.pop('notes', None)
        identifiers_data = validated_data.pop('identifiers', None)
        appraisal_date = validated_data.pop('appraisal_date', instance.tag.appraisal_date)

        self.update_identifiers(instance, identifiers_data)
        self.update_notes(instance, notes_data)

        with transaction.atomic():
            for structure in structures:
                if not TagStructure.objects.filter(tag=instance.tag, structure__template=structure).exists():
                    structure_instance, _ = structure.create_template_instance(instance.tag)
                    for instance_unit in structure_instance.units.all():
                        StructureUnitDocument.from_obj(instance_unit).save()

            instance.tag.appraisal_date = appraisal_date
            instance.tag.save()
            TagVersion.objects.filter(pk=instance.pk).update(**validated_data)
            instance.refresh_from_db()

        doc = Archive.from_obj(instance)
        doc.save()

        return instance
Esempio n. 2
0
    def update(self, instance: TagVersion, validated_data):
        structure_unit = validated_data.pop('structure_unit', None)
        parent = validated_data.pop('parent', None)
        structure = validated_data.pop('structure', None)
        notes_data = validated_data.pop('notes', None)
        identifiers_data = validated_data.pop('identifiers', None)
        information_package = validated_data.pop('information_package', instance.tag.information_package)
        appraisal_date = validated_data.pop('appraisal_date', instance.tag.appraisal_date)
        validated_data.pop('index', None)

        self.update_identifiers(instance, identifiers_data)
        self.update_notes(instance, notes_data)

        if structure is not None:
            tag = instance.tag

            if structure_unit is not None:
                archive_structure = structure.tagstructure_set.first().get_root()
                parent = archive_structure

            elif parent is not None:
                parent_structure = parent.get_structures(structure).get()
                parent = parent_structure
                structure_unit = None

            if parent or structure_unit:
                TagStructure.objects.update_or_create(tag=tag, structure=structure, defaults={
                    'parent': parent,
                    'structure_unit': structure_unit,
                })

        instance.tag.information_package = information_package
        instance.tag.appraisal_date = appraisal_date
        instance.tag.save()
        TagVersion.objects.filter(pk=instance.pk).update(**validated_data)
        instance.refresh_from_db()

        if instance.elastic_index == 'component':
            doc = Component.from_obj(instance)
        elif instance.elastic_index == 'document':
            doc = File.from_obj(instance)

        doc.save()

        return instance