Issue #56, Remove Metadata Sets
This commit is contained in:
@@ -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, [
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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'))
|
||||
|
||||
@@ -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]
|
||||
@@ -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']
|
||||
@@ -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'),
|
||||
)
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user