Issue #30, Initial commit of the document states app

This commit is contained in:
Roberto Rosario
2014-10-14 23:42:16 -04:00
parent 4e2120edfd
commit 598e4e0c25
7 changed files with 221 additions and 0 deletions

View File

View 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)

View 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

View 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']

22
mayan/apps/states/urls.py Normal file
View 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'),
)

View 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