Issue #56, Remove Metadata Sets

This commit is contained in:
Roberto Rosario
2014-10-21 17:14:31 -04:00
parent 549f0fdc87
commit 92c76d9f33
12 changed files with 108 additions and 303 deletions

View File

@@ -14,12 +14,10 @@ from .api import get_metadata_string
from .links import (metadata_add, metadata_edit, metadata_multiple_add,
metadata_multiple_edit, metadata_multiple_remove,
metadata_remove, metadata_view,
setup_document_type_metadata, setup_metadata_set_create,
setup_metadata_set_delete, setup_metadata_set_edit,
setup_metadata_set_list, setup_metadata_set_members,
setup_metadata_type_create, setup_metadata_type_delete,
setup_metadata_type_edit, setup_metadata_type_list)
from .models import MetadataSet, MetadataType
setup_document_type_metadata, setup_metadata_type_create,
setup_metadata_type_delete, setup_metadata_type_edit,
setup_metadata_type_list)
from .models import MetadataType
from .permissions import (PERMISSION_METADATA_DOCUMENT_ADD,
PERMISSION_METADATA_DOCUMENT_EDIT,
PERMISSION_METADATA_DOCUMENT_REMOVE,
@@ -31,11 +29,8 @@ register_links(Document, [metadata_view], menu_name='form_header')
register_links(DocumentType, [setup_document_type_metadata])
register_links(MetadataType, [setup_metadata_type_edit, setup_metadata_type_delete])
register_links([MetadataType, 'metadata:setup_metadata_type_list', 'metadata:setup_metadata_type_create'], [setup_metadata_type_list, setup_metadata_type_create], menu_name='secondary_menu')
register_links(MetadataSet, [setup_metadata_set_edit, setup_metadata_set_members, setup_metadata_set_delete])
register_links([MetadataSet, 'metadata:setup_metadata_set_list', 'metadata:setup_metadata_set_create'], [setup_metadata_set_list, setup_metadata_set_create], menu_name='secondary_menu')
register_multi_item_links(['folders:folder_view', 'indexes:index_instance_node_view', 'documents:document_type_document_list', 'search:search', 'search:results', 'linking:document_group_view', 'documents:document_list', 'documents:document_list_recent', 'tags:tag_tagged_item_list'], [metadata_multiple_add, metadata_multiple_edit, metadata_multiple_remove])
register_setup(setup_metadata_set_list)
register_setup(setup_metadata_type_list)
class_permissions(Document, [

View File

@@ -2,25 +2,17 @@ from __future__ import absolute_import
from django.contrib import admin
from .models import (DocumentMetadata, DocumentTypeDefaults, MetadataSet,
MetadataSetItem, MetadataType)
from .models import DocumentMetadata, DocumentTypeDefaults, MetadataType
class DocumentTypeDefaultsAdmin(admin.ModelAdmin):
filter_horizontal = ('default_metadata_sets', 'default_metadata')
filter_horizontal = ('default_metadata',)
class MetadataTypeAdmin(admin.ModelAdmin):
list_display = ('name', 'title', 'default', 'lookup')
class MetadataSetItemInline(admin.StackedInline):
model = MetadataSetItem
extra = 1
classes = ('collapse-open',)
allow_add = True
class DocumentMetadataInline(admin.StackedInline):
model = DocumentMetadata
extra = 0
@@ -28,10 +20,5 @@ class DocumentMetadataInline(admin.StackedInline):
allow_add = False
class MetadataSetAdmin(admin.ModelAdmin):
inlines = [MetadataSetItemInline]
admin.site.register(DocumentTypeDefaults, DocumentTypeDefaultsAdmin)
admin.site.register(MetadataSet, MetadataSetAdmin)
admin.site.register(MetadataType, MetadataTypeAdmin)

View File

@@ -6,7 +6,7 @@ from django.utils.translation import ugettext_lazy as _
from common.widgets import ScrollableCheckboxSelectMultiple
from .models import DocumentTypeDefaults, MetadataSet, MetadataType
from .models import DocumentTypeDefaults, MetadataType
from .settings import AVAILABLE_FUNCTIONS, AVAILABLE_MODELS, AVAILABLE_VALIDATORS
@@ -87,18 +87,10 @@ class MetadataSelectionForm(forms.Form):
if document_type:
try:
defaults = document_type.documenttypedefaults_set.get()
self.fields['metadata_sets'].initial = defaults.default_metadata_sets.all()
self.fields['metadata_types'].initial = defaults.default_metadata.all()
except DocumentTypeDefaults.DoesNotExist:
pass
metadata_sets = forms.ModelMultipleChoiceField(
queryset=MetadataSet.objects.all(),
label=_(u'Metadata sets'),
required=False,
widget=ScrollableCheckboxSelectMultiple(attrs={'size': 10, 'class': 'choice_form'})
)
metadata_types = forms.ModelMultipleChoiceField(
queryset=MetadataType.objects.all(),
label=_(u'Metadata'),
@@ -112,8 +104,3 @@ MetadataRemoveFormSet = formset_factory(MetadataRemoveForm, extra=0)
class MetadataTypeForm(forms.ModelForm):
class Meta:
model = MetadataType
class MetadataSetForm(forms.ModelForm):
class Meta:
model = MetadataSet

View File

@@ -8,10 +8,6 @@ from .permissions import (PERMISSION_METADATA_DOCUMENT_ADD,
PERMISSION_METADATA_DOCUMENT_EDIT,
PERMISSION_METADATA_DOCUMENT_REMOVE,
PERMISSION_METADATA_DOCUMENT_VIEW,
PERMISSION_METADATA_SET_CREATE,
PERMISSION_METADATA_SET_DELETE,
PERMISSION_METADATA_SET_EDIT,
PERMISSION_METADATA_SET_VIEW,
PERMISSION_METADATA_TYPE_CREATE,
PERMISSION_METADATA_TYPE_DELETE,
PERMISSION_METADATA_TYPE_EDIT,
@@ -28,12 +24,6 @@ metadata_multiple_remove = {'text': _(u'Remove metadata'), 'view': 'metadata:met
setup_document_type_metadata = {'text': _(u'Default metadata'), 'view': 'metadata:setup_document_type_metadata', 'args': 'document_type.pk', 'famfam': 'xhtml', 'permissions': [PERMISSION_DOCUMENT_TYPE_EDIT]}
setup_metadata_set_list = {'text': _(u'Metadata sets'), 'view': 'metadata:setup_metadata_set_list', 'famfam': 'table', 'icon': 'table.png', 'permissions': [PERMISSION_METADATA_SET_VIEW]}
setup_metadata_set_edit = {'text': _(u'Edit'), 'view': 'metadata:setup_metadata_set_edit', 'args': 'object.pk', 'famfam': 'table_edit', 'permissions': [PERMISSION_METADATA_SET_EDIT]}
setup_metadata_set_members = {'text': _(u'Members'), 'view': 'metadata:setup_metadata_set_members', 'args': 'object.pk', 'famfam': 'table_link', 'permissions': [PERMISSION_METADATA_SET_EDIT]}
setup_metadata_set_delete = {'text': _(u'Delete'), 'view': 'metadata:setup_metadata_set_delete', 'args': 'object.pk', 'famfam': 'table_delete', 'permissions': [PERMISSION_METADATA_SET_DELETE]}
setup_metadata_set_create = {'text': _(u'Create new'), 'view': 'metadata:setup_metadata_set_create', 'famfam': 'table_add', 'permissions': [PERMISSION_METADATA_SET_CREATE]}
setup_metadata_type_list = {'text': _(u'Metadata types'), 'view': 'metadata:setup_metadata_type_list', 'famfam': 'xhtml_go', 'icon': 'xhtml.png', 'permissions': [PERMISSION_METADATA_TYPE_VIEW]}
setup_metadata_type_edit = {'text': _(u'Edit'), 'view': 'metadata:setup_metadata_type_edit', 'args': 'object.pk', 'famfam': 'xhtml', 'permissions': [PERMISSION_METADATA_TYPE_EDIT]}
setup_metadata_type_delete = {'text': _(u'Delete'), 'view': 'metadata:setup_metadata_type_delete', 'args': 'object.pk', 'famfam': 'xhtml_delete', 'permissions': [PERMISSION_METADATA_TYPE_DELETE]}

View File

@@ -6,8 +6,3 @@ from django.db import models
class MetadataTypeManager(models.Manager):
def get_by_natural_key(self, name):
return self.get(name=name)
class MetadataSetManager(models.Manager):
def get_by_natural_key(self, title):
return self.get(title=title)

View File

@@ -5,7 +5,7 @@ from django.utils.translation import ugettext_lazy as _
from documents.models import Document, DocumentType
from .managers import MetadataSetManager, MetadataTypeManager
from .managers import MetadataTypeManager
class MetadataType(models.Model):
@@ -39,43 +39,6 @@ class MetadataType(models.Model):
verbose_name_plural = _(u'Metadata types')
class MetadataSet(models.Model):
"""
Define a group of metadata types
"""
title = models.CharField(max_length=48, verbose_name=_(u'Title'), unique=True)
objects = MetadataSetManager()
def __unicode__(self):
return self.title
def natural_key(self):
return (self.title,)
class Meta:
ordering = ('title',)
verbose_name = _(u'Metadata set')
verbose_name_plural = _(u'Metadata set')
class MetadataSetItem(models.Model):
"""
Define the set of metadata that relates to a set or group of
metadata fields
"""
# TODO: is the metadata set model really necessary?
metadata_set = models.ForeignKey(MetadataSet, verbose_name=_(u'Metadata set'))
metadata_type = models.ForeignKey(MetadataType, verbose_name=_(u'Metadata type'))
def __unicode__(self):
return unicode(self.metadata_type)
class Meta:
verbose_name = _(u'Metadata set item')
verbose_name_plural = _(u'Metadata set items')
class DocumentMetadata(models.Model):
"""
Link a document to a specific instance of a metadata type with it's
@@ -95,12 +58,10 @@ class DocumentMetadata(models.Model):
class DocumentTypeDefaults(models.Model):
"""
Default preselected metadata types and metadata set per document
type
Default preselected metadata types per document type
"""
document_type = models.ForeignKey(DocumentType, verbose_name=_(u'Document type'))
default_metadata_sets = models.ManyToManyField(MetadataSet, blank=True, verbose_name=_(u'Default metadata sets'))
default_metadata = models.ManyToManyField(MetadataType, blank=True, verbose_name=_(u'Default metadata'))
default_metadata = models.ManyToManyField(MetadataType, blank=True, verbose_name=_(u'Metadata'))
def __unicode__(self):
return unicode(self.document_type)

View File

@@ -15,8 +15,3 @@ PERMISSION_METADATA_TYPE_EDIT = Permission.objects.register(metadata_setup_names
PERMISSION_METADATA_TYPE_CREATE = Permission.objects.register(metadata_setup_namespace, 'metadata_type_create', _(u'Create new metadata types'))
PERMISSION_METADATA_TYPE_DELETE = Permission.objects.register(metadata_setup_namespace, 'metadata_type_delete', _(u'Delete metadata types'))
PERMISSION_METADATA_TYPE_VIEW = Permission.objects.register(metadata_setup_namespace, 'metadata_type_view', _(u'View metadata types'))
PERMISSION_METADATA_SET_EDIT = Permission.objects.register(metadata_setup_namespace, 'metadata_set_edit', _(u'Edit metadata sets'))
PERMISSION_METADATA_SET_CREATE = Permission.objects.register(metadata_setup_namespace, 'metadata_set_create', _(u'Create new metadata sets'))
PERMISSION_METADATA_SET_DELETE = Permission.objects.register(metadata_setup_namespace, 'metadata_set_delete', _(u'Delete metadata sets'))
PERMISSION_METADATA_SET_VIEW = Permission.objects.register(metadata_setup_namespace, 'metadata_set_view', _(u'View metadata sets'))

View File

@@ -1,23 +0,0 @@
from __future__ import absolute_import
from .cleanup import cleanup
bootstrap_models = [
{
'name': 'metadatatype',
},
{
'name': 'metadataset',
'dependencies': ['metadata.metadatatype']
},
{
'name': 'metadatasetitem',
'dependencies': ['metadata.metadataset']
},
{
'name': 'documenttypedefaults',
'dependencies': ['documents.documenttype']
},
]
cleanup_functions = [cleanup]

View File

@@ -0,0 +1,91 @@
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Deleting model 'MetadataSet'
db.delete_table(u'metadata_metadataset')
# Deleting model 'MetadataSetItem'
db.delete_table(u'metadata_metadatasetitem')
# Removing M2M table for field default_metadata_sets on 'DocumentTypeDefaults'
db.delete_table(db.shorten_name(u'metadata_documenttypedefaults_default_metadata_sets'))
# Changing field 'DocumentMetadata.value'
db.alter_column(u'metadata_documentmetadata', 'value', self.gf('django.db.models.fields.CharField')(max_length=255))
def backwards(self, orm):
# Adding model 'MetadataSet'
db.create_table(u'metadata_metadataset', (
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('title', self.gf('django.db.models.fields.CharField')(max_length=48, unique=True)),
))
db.send_create_signal('metadata', ['MetadataSet'])
# Adding model 'MetadataSetItem'
db.create_table(u'metadata_metadatasetitem', (
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('metadata_set', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['metadata.MetadataSet'])),
('metadata_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['metadata.MetadataType'])),
))
db.send_create_signal('metadata', ['MetadataSetItem'])
# Adding M2M table for field default_metadata_sets on 'DocumentTypeDefaults'
m2m_table_name = db.shorten_name(u'metadata_documenttypedefaults_default_metadata_sets')
db.create_table(m2m_table_name, (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('documenttypedefaults', models.ForeignKey(orm['metadata.documenttypedefaults'], null=False)),
('metadataset', models.ForeignKey(orm['metadata.metadataset'], null=False))
))
db.create_unique(m2m_table_name, ['documenttypedefaults_id', 'metadataset_id'])
# Changing field 'DocumentMetadata.value'
db.alter_column(u'metadata_documentmetadata', 'value', self.gf('django.db.models.fields.CharField')(max_length=256))
models = {
u'documents.document': {
'Meta': {'ordering': "['-date_added']", 'object_name': 'Document'},
'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'document_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'documents'", 'to': u"orm['documents.DocumentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'uuid': ('django.db.models.fields.CharField', [], {'max_length': '48', 'blank': 'True'})
},
u'documents.documenttype': {
'Meta': {'ordering': "['name']", 'object_name': 'DocumentType'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'}),
'ocr': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
u'metadata.documentmetadata': {
'Meta': {'object_name': 'DocumentMetadata'},
'document': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'metadata'", 'to': u"orm['documents.Document']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'metadata_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['metadata.MetadataType']"}),
'value': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'})
},
u'metadata.documenttypedefaults': {
'Meta': {'object_name': 'DocumentTypeDefaults'},
'default_metadata': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['metadata.MetadataType']", 'symmetrical': 'False', 'blank': 'True'}),
'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['documents.DocumentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'metadata.metadatatype': {
'Meta': {'ordering': "('title',)", 'object_name': 'MetadataType'},
'default': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'lookup': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '48'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '48', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['metadata']

View File

@@ -17,12 +17,6 @@ urlpatterns = patterns('metadata.views',
url(r'^setup/type/(?P<metadatatype_id>\d+)/edit/$', 'setup_metadata_type_edit', (), 'setup_metadata_type_edit'),
url(r'^setup/type/(?P<metadatatype_id>\d+)/delete/$', 'setup_metadata_type_delete', (), 'setup_metadata_type_delete'),
url(r'^setup/set/list/$', 'setup_metadata_set_list', (), 'setup_metadata_set_list'),
url(r'^setup/set/create/$', 'setup_metadata_set_create', (), 'setup_metadata_set_create'),
url(r'^setup/set/(?P<metadata_set_id>\d+)/edit/$', 'setup_metadata_set_edit', (), 'setup_metadata_set_edit'),
url(r'^setup/set/(?P<metadata_set_id>\d+)/members/$', 'setup_metadata_set_members', (), 'setup_metadata_set_members'),
url(r'^setup/set/(?P<metadata_set_id>\d+)/delete/$', 'setup_metadata_set_delete', (), 'setup_metadata_set_delete'),
url(r'^setup/document/type/(?P<document_type_id>\d+)/metadata/default/edit/$', 'setup_document_type_metadata', (), 'setup_document_type_metadata'),
)

View File

@@ -20,17 +20,12 @@ from common.views import assign_remove
from .api import save_metadata_list
from .classes import MetadataObjectWrapper
from .forms import (AddMetadataForm, MetadataFormSet, MetadataRemoveFormSet,
MetadataSetForm, MetadataTypeForm)
from .models import (DocumentMetadata, DocumentTypeDefaults, MetadataSet,
MetadataSetItem, MetadataType)
MetadataTypeForm)
from .models import DocumentMetadata, DocumentTypeDefaults, MetadataType
from .permissions import (PERMISSION_METADATA_DOCUMENT_ADD,
PERMISSION_METADATA_DOCUMENT_EDIT,
PERMISSION_METADATA_DOCUMENT_REMOVE,
PERMISSION_METADATA_DOCUMENT_VIEW,
PERMISSION_METADATA_SET_CREATE,
PERMISSION_METADATA_SET_DELETE,
PERMISSION_METADATA_SET_EDIT,
PERMISSION_METADATA_SET_VIEW,
PERMISSION_METADATA_TYPE_CREATE,
PERMISSION_METADATA_TYPE_DELETE,
PERMISSION_METADATA_TYPE_EDIT,
@@ -383,197 +378,43 @@ def setup_metadata_type_delete(request, metadatatype_id):
context_instance=RequestContext(request))
def setup_metadata_set_list(request):
Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_SET_VIEW])
context = {
'object_list': MetadataSet.objects.all(),
'title': _(u'Metadata sets'),
'hide_link': True,
'extra_columns': [
{
'name': _(u'Members'),
'attribute': encapsulate(lambda x: x.metadatasetitem_set.count()),
},
]
}
return render_to_response('main/generic_list.html', context,
context_instance=RequestContext(request))
def setup_metadata_set_edit(request, metadata_set_id):
Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_TYPE_EDIT])
metadata_set = get_object_or_404(MetadataSet, pk=metadata_set_id)
if request.method == 'POST':
form = MetadataSetForm(instance=metadata_set, data=request.POST)
if form.is_valid():
try:
form.save()
messages.success(request, _(u'Metadata set edited successfully'))
return HttpResponseRedirect(reverse('metadata:setup_metadata_set_list'))
except Exception as exception:
messages.error(request, _(u'Error editing metadata set; %s') % exception)
pass
else:
form = MetadataSetForm(instance=metadata_set)
return render_to_response('main/generic_form.html', {
'title': _(u'Edit metadata set: %s') % metadata_set,
'form': form,
'object': metadata_set,
'object_name': _(u'Metadata set'),
}, context_instance=RequestContext(request))
def get_set_members(metadata_set):
return [item.metadata_type for item in metadata_set.metadatasetitem_set.all()]
def get_non_set_members(metadata_set):
return MetadataType.objects.exclude(pk__in=[member.pk for member in get_set_members(metadata_set)])
def add_set_member(metadata_set, selection):
model, pk = selection.split(u',')
metadata_type = get_object_or_404(MetadataType, pk=pk)
new_member, created = MetadataSetItem.objects.get_or_create(metadata_set=metadata_set, metadata_type=metadata_type)
if not created:
raise Exception
def remove_set_member(metadata_set, selection):
model, pk = selection.split(u',')
metadata_type = get_object_or_404(MetadataType, pk=pk)
member = MetadataSetItem.objects.get(metadata_type=metadata_type, metadata_set=metadata_set)
member.delete()
def setup_metadata_set_members(request, metadata_set_id):
Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_SET_EDIT])
metadata_set = get_object_or_404(MetadataSet, pk=metadata_set_id)
return assign_remove(
request,
left_list=lambda: generate_choices_w_labels(get_non_set_members(metadata_set), display_object_type=False),
right_list=lambda: generate_choices_w_labels(get_set_members(metadata_set), display_object_type=False),
add_method=lambda x: add_set_member(metadata_set, x),
remove_method=lambda x: remove_set_member(metadata_set, x),
left_list_title=_(u'Non members of metadata set: %s') % metadata_set,
right_list_title=_(u'Members of metadata set: %s') % metadata_set,
extra_context={
'object': metadata_set,
'object_name': _(u'Metadata set'),
}
)
def setup_metadata_set_create(request):
Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_SET_CREATE])
if request.method == 'POST':
form = MetadataSetForm(request.POST)
if form.is_valid():
form.save()
messages.success(request, _(u'Metadata set created successfully'))
return HttpResponseRedirect(reverse('metadata:setup_metadata_set_list'))
else:
form = MetadataSetForm()
return render_to_response('main/generic_form.html', {
'title': _(u'Create metadata set'),
'form': form,
}, context_instance=RequestContext(request))
def setup_metadata_set_delete(request, metadata_set_id):
Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_SET_DELETE])
metadata_set = get_object_or_404(MetadataSet, pk=metadata_set_id)
post_action_redirect = reverse('metadata:setup_metadata_set_list')
previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', post_action_redirect)))
next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', post_action_redirect)))
if request.method == 'POST':
try:
metadata_set.delete()
messages.success(request, _(u'Metadata set: %s deleted successfully.') % metadata_set)
return HttpResponseRedirect(post_action_redirect)
except Exception as exception:
messages.error(request, _(u'Metadata set: %(metadata_set)s delete error: %(error)s') % {
'metadata_set': metadata_set, 'error': exception})
return HttpResponseRedirect(previous)
context = {
'object_name': _(u'Metadata set'),
'delete_view': True,
'next': next,
'previous': previous,
'object': metadata_set,
'title': _(u'Are you sure you wish to delete the metadata set: %s?') % metadata_set,
'form_icon': u'application_form_delete.png',
}
return render_to_response('main/generic_confirm.html', context,
context_instance=RequestContext(request))
def _as_choice_list(items):
return sorted([(MetadataObjectWrapper.encapsulate(item).gid, get_object_name(item, display_object_type=False)) for item in items], key=lambda x: x[1])
def get_document_type_metadata_non_members(document_type):
metadata_types, metadata_sets = get_document_type_metadata_members(document_type, separate=True)
metadata_types = get_document_type_metadata_members(document_type, separate=True)
metadata_types = set(MetadataType.objects.all()) - set(metadata_types)
metadata_sets = set(MetadataSet.objects.all()) - set(metadata_sets)
non_members = []
if metadata_types:
non_members.append((_(u'Metadata types'), _as_choice_list(list(metadata_types))))
if metadata_sets:
non_members.append((_(u'Metadata sets'), _as_choice_list(list(metadata_sets))))
return non_members
def get_document_type_metadata_members(document_type, separate=False):
metadata_types = set(document_type.documenttypedefaults_set.get().default_metadata.all())
metadata_sets = set(document_type.documenttypedefaults_set.get().default_metadata_sets.all())
if separate:
return metadata_types, metadata_sets
return metadata_types
else:
members = []
if metadata_types:
members.append((_(u'Metadata types'), _as_choice_list(list(metadata_types))))
if metadata_sets:
members.append((_(u'Metadata sets'), _as_choice_list(list(metadata_sets))))
return members
def add_document_type_metadata(document_type, selection):
metadata_object = MetadataObjectWrapper.get(selection).source_object
try:
document_type.documenttypedefaults_set.get().default_metadata.add(metadata_object)
except TypeError:
document_type.documenttypedefaults_set.get().default_metadata_sets.add(metadata_object)
document_type.documenttypedefaults_set.get().default_metadata.add(metadata_object)
def remove_document_type_metadata(document_type, selection):
metadata_object = MetadataObjectWrapper.get(selection).source_object
if isinstance(metadata_object, MetadataType):
document_type.documenttypedefaults_set.get().default_metadata.remove(metadata_object)
else:
document_type.documenttypedefaults_set.get().default_metadata_sets.remove(metadata_object)
document_type.documenttypedefaults_set.get().default_metadata.remove(metadata_object)
def setup_document_type_metadata(request, document_type_id):

View File

@@ -22,7 +22,7 @@ class DocumentCreateWizard(MayanPermissionCheckMixin, SessionWizardView):
def has_metadata_types(wizard):
# Skip the 3rd step if no metadata types or sets are selected
try:
return wizard.get_cleaned_data_for_step('1')['metadata_sets'] or wizard.get_cleaned_data_for_step('1')['metadata_types']
return wizard.get_cleaned_data_for_step('1')['metadata_types']
except TypeError:
return False
@@ -34,14 +34,6 @@ class DocumentCreateWizard(MayanPermissionCheckMixin, SessionWizardView):
'metadata_type': metadata_type,
})
for metadata_set in self.get_cleaned_data_for_step('1')['metadata_sets']:
for metadata_set_item in metadata_set.metadatasetitem_set.all():
data = {
'metadata_type': metadata_set_item.metadata_type,
}
if data not in initial:
initial.append(data)
return initial
def __init__(self, *args, **kwargs):