From eff81cf8afc26bb82902098343690b86a2c93e54 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 12 Nov 2014 02:15:52 -0400 Subject: [PATCH] Close issues #118 and #119 --- mayan/apps/metadata/classes.py | 5 ++++- mayan/apps/metadata/tasks.py | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 mayan/apps/metadata/tasks.py diff --git a/mayan/apps/metadata/classes.py b/mayan/apps/metadata/classes.py index 12de37df19..3b614c50c1 100644 --- a/mayan/apps/metadata/classes.py +++ b/mayan/apps/metadata/classes.py @@ -1,6 +1,7 @@ from django.utils.translation import ugettext_lazy as _ from .models import DocumentTypeMetadataType, MetadataType +from .tasks import task_add_required_metadata_type, task_remove_metadata_type class DocumentTypeMetadataTypeHelper(object): @@ -26,9 +27,12 @@ class DocumentTypeMetadataTypeHelper(object): def add(self, metadata_type, required=False): DocumentTypeMetadataType.objects.create(document_type=self.instance, metadata_type=metadata_type, required=required) + if required: + task_add_required_metadata_type.apply_async(kwargs={'metadata_type_id': metadata_type.pk, 'document_type_id': self.instance.pk}, queue='metadata') def remove(self, metadata_type): DocumentTypeMetadataType.objects.get(document_type=self.instance, metadata_type=metadata_type).delete() + task_remove_metadata_type.apply_async(kwargs={'metadata_type_id': metadata_type.pk, 'document_type_id': self.instance.pk}, queue='metadata') class DocumentMetadataHelper(object): @@ -45,4 +49,3 @@ class DocumentMetadataHelper(object): return self.instance.metadata.get(metadata_type__name=name).value except MetadataType.DoesNotExist: raise AttributeError(_(u'\'metadata\' object has no attribute \'%s\'') % name) - diff --git a/mayan/apps/metadata/tasks.py b/mayan/apps/metadata/tasks.py new file mode 100644 index 0000000000..53b01eedf5 --- /dev/null +++ b/mayan/apps/metadata/tasks.py @@ -0,0 +1,23 @@ +import logging + +from mayan.celery import app + +from documents.models import DocumentType + +from .models import DocumentMetadata, MetadataType + +logger = logging.getLogger(__name__) + + +@app.task(ignore_result=True) +def task_remove_metadata_type(document_type_id, metadata_type_id): + DocumentMetadata.objects.filter(document__document_type__id=document_type_id, metadata_type__id=metadata_type_id).delete() + + +@app.task(ignore_result=True) +def task_add_required_metadata_type(document_type_id, metadata_type_id): + document_type = DocumentType.objects.get(pk=document_type_id) + metadata_type = MetadataType.objects.get(pk=metadata_type_id) + + for document in document_type.documents.all(): + DocumentMetadata.objects.create(document=document, metadata_type=metadata_type)