Issue #30, Initial commit of the document states app
This commit is contained in:
0
mayan/apps/states/__init__.py
Normal file
0
mayan/apps/states/__init__.py
Normal file
14
mayan/apps/states/admin.py
Normal file
14
mayan/apps/states/admin.py
Normal file
@@ -0,0 +1,14 @@
|
||||
from django.contrib import admin
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from django.contrib.admin.widgets import FilteredSelectMultiple
|
||||
|
||||
|
||||
from .models import (DocumentStateLog, State, StateTransition,
|
||||
DocumentTypeStateCollection)
|
||||
|
||||
|
||||
admin.site.register(DocumentStateLog)
|
||||
admin.site.register(DocumentTypeStateCollection)
|
||||
admin.site.register(State)
|
||||
admin.site.register(StateTransition)
|
||||
59
mayan/apps/states/models.py
Normal file
59
mayan/apps/states/models.py
Normal file
@@ -0,0 +1,59 @@
|
||||
from __future__ import absolute_import
|
||||
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from documents.models import Document, DocumentType
|
||||
|
||||
|
||||
class DocumentTypeStateCollection(models.Model):
|
||||
document_type = models.ForeignKey(DocumentType, related_name='state_collections', verbose_name=_('Document type'))
|
||||
label = models.CharField(max_length=128, verbose_name=_('Label'))
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('Document type state collection')
|
||||
verbose_name_plural = _('Document type state collections')
|
||||
|
||||
def __unicode__(self):
|
||||
return self.label
|
||||
|
||||
|
||||
class State(models.Model):
|
||||
document_type_state_collection = models.ForeignKey(DocumentTypeStateCollection, related_name='states', verbose_name=_('Document type state collection'))
|
||||
label = models.CharField(max_length=128, verbose_name=_('Label'))
|
||||
initial = models.BooleanField(default=False, verbose_name=_('Initial'))
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('State template')
|
||||
verbose_name_plural = _('State templates')
|
||||
|
||||
def __unicode__(self):
|
||||
return self.label
|
||||
|
||||
|
||||
class StateTransition(models.Model):
|
||||
source_state_template = models.ForeignKey(State, related_name='transitions', verbose_name=_('Source state'))
|
||||
destination_state_template = models.ForeignKey(State, verbose_name=_('Destination state'))
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('State transition')
|
||||
verbose_name_plural = _('State transitions')
|
||||
|
||||
def __unicode__(self):
|
||||
return u'{} => {}'.format(self.source_state_template, self.destination_state_template)
|
||||
|
||||
|
||||
class DocumentStateLog(models.Model):
|
||||
datetime = models.DateTimeField(auto_now_add=True, verbose_name=_('Date time'))
|
||||
document = models.ForeignKey(Document, related_name='states_log', verbose_name=_('Document'))
|
||||
document_type_state_collection = models.ForeignKey(DocumentTypeStateCollection, verbose_name=_('Document type state collection'))
|
||||
state = models.ForeignKey(State, verbose_name=_('State'))
|
||||
|
||||
class Meta:
|
||||
unique_together = ('document', 'document_type_state_collection')
|
||||
verbose_name = _('Document state log')
|
||||
verbose_name_plural = _(u'Document state logs')
|
||||
|
||||
def __unicode__(self):
|
||||
return self.state
|
||||
110
mayan/apps/states/south_migrations/0001_initial.py
Normal file
110
mayan/apps/states/south_migrations/0001_initial.py
Normal file
@@ -0,0 +1,110 @@
|
||||
# -*- 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):
|
||||
# Adding model 'DocumentTypeStateCollection'
|
||||
db.create_table(u'states_documenttypestatecollection', (
|
||||
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||
('document_type', self.gf('django.db.models.fields.related.ForeignKey')(related_name='state_collections', to=orm['documents.DocumentType'])),
|
||||
('label', self.gf('django.db.models.fields.CharField')(max_length=128)),
|
||||
))
|
||||
db.send_create_signal(u'states', ['DocumentTypeStateCollection'])
|
||||
|
||||
# Adding model 'State'
|
||||
db.create_table(u'states_state', (
|
||||
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||
('document_type_state_collection', self.gf('django.db.models.fields.related.ForeignKey')(related_name='states', to=orm['states.DocumentTypeStateCollection'])),
|
||||
('label', self.gf('django.db.models.fields.CharField')(max_length=128)),
|
||||
('initial', self.gf('django.db.models.fields.BooleanField')(default=False)),
|
||||
))
|
||||
db.send_create_signal(u'states', ['State'])
|
||||
|
||||
# Adding model 'StateTransition'
|
||||
db.create_table(u'states_statetransition', (
|
||||
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||
('source_state_template', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['states.State'])),
|
||||
('destination_state_template', self.gf('django.db.models.fields.related.ForeignKey')(related_name='transitions', to=orm['states.State'])),
|
||||
))
|
||||
db.send_create_signal(u'states', ['StateTransition'])
|
||||
|
||||
# Adding model 'DocumentStateLog'
|
||||
db.create_table(u'states_documentstatelog', (
|
||||
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||
('datetime', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
|
||||
('document', self.gf('django.db.models.fields.related.ForeignKey')(related_name='states_log', to=orm['documents.Document'])),
|
||||
('document_type_state_collection', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['states.DocumentTypeStateCollection'])),
|
||||
('state', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['states.State'])),
|
||||
))
|
||||
db.send_create_signal(u'states', ['DocumentStateLog'])
|
||||
|
||||
# Adding unique constraint on 'DocumentStateLog', fields ['document', 'document_type_state_collection']
|
||||
db.create_unique(u'states_documentstatelog', ['document_id', 'document_type_state_collection_id'])
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
# Removing unique constraint on 'DocumentStateLog', fields ['document', 'document_type_state_collection']
|
||||
db.delete_unique(u'states_documentstatelog', ['document_id', 'document_type_state_collection_id'])
|
||||
|
||||
# Deleting model 'DocumentTypeStateCollection'
|
||||
db.delete_table(u'states_documenttypestatecollection')
|
||||
|
||||
# Deleting model 'State'
|
||||
db.delete_table(u'states_state')
|
||||
|
||||
# Deleting model 'StateTransition'
|
||||
db.delete_table(u'states_statetransition')
|
||||
|
||||
# Deleting model 'DocumentStateLog'
|
||||
db.delete_table(u'states_documentstatelog')
|
||||
|
||||
|
||||
models = {
|
||||
u'documents.document': {
|
||||
'Meta': {'ordering': "['-date_added']", 'object_name': 'Document'},
|
||||
'date_added': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
|
||||
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'document_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'documents'", 'null': 'True', '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'})
|
||||
},
|
||||
u'states.documentstatelog': {
|
||||
'Meta': {'unique_together': "(('document', 'document_type_state_collection'),)", 'object_name': 'DocumentStateLog'},
|
||||
'datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'document': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'states_log'", 'to': u"orm['documents.Document']"}),
|
||||
'document_type_state_collection': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['states.DocumentTypeStateCollection']"}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['states.State']"})
|
||||
},
|
||||
u'states.documenttypestatecollection': {
|
||||
'Meta': {'object_name': 'DocumentTypeStateCollection'},
|
||||
'document_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'state_collections'", 'to': u"orm['documents.DocumentType']"}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'label': ('django.db.models.fields.CharField', [], {'max_length': '128'})
|
||||
},
|
||||
u'states.state': {
|
||||
'Meta': {'object_name': 'State'},
|
||||
'document_type_state_collection': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'states'", 'to': u"orm['states.DocumentTypeStateCollection']"}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'initial': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'label': ('django.db.models.fields.CharField', [], {'max_length': '128'})
|
||||
},
|
||||
u'states.statetransition': {
|
||||
'Meta': {'object_name': 'StateTransition'},
|
||||
'destination_state_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'transitions'", 'to': u"orm['states.State']"}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'source_state_template': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['states.State']"})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['states']
|
||||
0
mayan/apps/states/south_migrations/__init__.py
Normal file
0
mayan/apps/states/south_migrations/__init__.py
Normal file
22
mayan/apps/states/urls.py
Normal file
22
mayan/apps/states/urls.py
Normal file
@@ -0,0 +1,22 @@
|
||||
from django.conf.urls import patterns, url
|
||||
|
||||
|
||||
urlpatterns = patterns('states.views',
|
||||
# Setup views
|
||||
|
||||
url(r'^setup/document_type/(?P<document_type_id>\d+)/collections/$', 'setup_source_list', name='document_type_collection_list'),
|
||||
|
||||
#url(r'^setup/interactive/(?P<source_type>\w+)/list/$', 'setup_source_list', (), 'setup_source_list'),
|
||||
#url(r'^setup/interactive/(?P<source_id>\d+)/edit/$', 'setup_source_edit', (), 'setup_source_edit'),
|
||||
#url(r'^setup/interactive/(?P<source_id>\d+)/delete/$', 'setup_source_delete', (), 'setup_source_delete'),
|
||||
#url(r'^setup/interactive/(?P<source_type>\w+)/create/$', 'setup_source_create', (), 'setup_source_create'),
|
||||
#url(r'^setup/interactive/(?P<source_id>\d+)/transformation/list/$', 'setup_source_transformation_list', (), 'setup_source_transformation_list'),
|
||||
#url(r'^setup/interactive/(?P<source_id>\d+)/transformation/create/$', 'setup_source_transformation_create', (), 'setup_source_transformation_create'),
|
||||
#url(r'^setup/interactive/source/transformation/(?P<transformation_id>\d+)/edit/$', 'setup_source_transformation_edit', (), 'setup_source_transformation_edit'),
|
||||
#url(r'^setup/interactive/source/transformation/(?P<transformation_id>\d+)/delete/$', 'setup_source_transformation_delete', (), 'setup_source_transformation_delete'),
|
||||
|
||||
# Document create views
|
||||
|
||||
#url(r'^create/from/local/multiple/$', DocumentCreateWizard.as_view(), name='document_create_multiple'),
|
||||
#url(r'^(?P<document_id>\d+)/create/siblings/$', 'document_create_siblings', (), 'document_create_siblings'),
|
||||
)
|
||||
16
mayan/apps/states/views.py
Normal file
16
mayan/apps/states/views.py
Normal file
@@ -0,0 +1,16 @@
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import render_to_response, get_object_or_404
|
||||
from django.template import RequestContext
|
||||
from django.utils.http import urlencode
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.utils.translation import ugettext
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from acls.models import AccessEntry
|
||||
from common.utils import encapsulate
|
||||
from documents.models import DocumentType, Document
|
||||
from permissions.models import Permission
|
||||
Reference in New Issue
Block a user