Add code selecton and create views
Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
This commit is contained in:
@@ -7,8 +7,6 @@ from django.views.decorators.cache import cache_control, patch_cache_control
|
||||
from rest_framework import generics
|
||||
|
||||
from mayan.apps.acls.models import AccessControlList
|
||||
from mayan.apps.documents.models import Document, DocumentType
|
||||
from mayan.apps.documents.permissions import permission_document_type_view
|
||||
from mayan.apps.rest_api.filters import MayanObjectPermissionsFilter
|
||||
from mayan.apps.rest_api.permissions import MayanPermission
|
||||
|
||||
@@ -63,12 +61,6 @@ class APIControlSheetListView(generics.ListCreateAPIView):
|
||||
*args, **kwargs
|
||||
)
|
||||
|
||||
#def get_serializer_class(self):
|
||||
# if self.request.method == 'GET':
|
||||
# return ControlSheetSerializer
|
||||
# else:
|
||||
# return WritableControlSheetSerializer
|
||||
|
||||
|
||||
class APIControlSheetView(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
@@ -96,12 +88,6 @@ class APIControlSheetView(generics.RetrieveUpdateDestroyAPIView):
|
||||
*args, **kwargs
|
||||
)
|
||||
|
||||
#def get_serializer_class(self):
|
||||
# if self.request.method == 'GET':
|
||||
# return ControlSheetSerializer
|
||||
# else:
|
||||
# return WritableControlSheetSerializer
|
||||
|
||||
|
||||
class APIControlSheetCodeListView(
|
||||
ControlSheetAPIViewMixin, generics.ListCreateAPIView
|
||||
@@ -169,11 +155,7 @@ class APIControlSheetCodeImageView(
|
||||
get: Returns an image representation of the selected control_sheet.
|
||||
"""
|
||||
filter_backends = (MayanObjectPermissionsFilter,)
|
||||
#mayan_object_permissions = {
|
||||
# 'GET': (permission_control_sheet_view,),
|
||||
#}
|
||||
lookup_url_kwarg = 'control_sheet_code_id'
|
||||
#queryset = ControlSheetCode.objects.all()
|
||||
|
||||
def get_queryset(self):
|
||||
return self.get_control_sheet().codes.all()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.apps import apps
|
||||
from django.db.models.signals import post_migrate, post_save
|
||||
from django.db.models.signals import post_migrate
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from mayan.apps.acls.classes import ModelPermission
|
||||
@@ -11,7 +11,7 @@ from mayan.apps.documents.signals import post_version_upload
|
||||
from mayan.apps.common.apps import MayanAppConfig
|
||||
from mayan.apps.common.html_widgets import TwoStateWidget
|
||||
from mayan.apps.common.menus import (
|
||||
menu_facet, menu_list_facet, menu_object, menu_secondary, menu_setup
|
||||
menu_list_facet, menu_object, menu_secondary, menu_setup
|
||||
)
|
||||
from mayan.apps.events.classes import ModelEventType
|
||||
from mayan.apps.events.links import (
|
||||
@@ -28,10 +28,9 @@ from .handlers import (
|
||||
from .links import (
|
||||
link_control_sheet_create, link_control_sheet_delete,
|
||||
link_control_sheet_edit, link_control_sheet_list,
|
||||
link_control_sheet_preview,
|
||||
|
||||
link_control_sheet_preview, link_control_sheet_print,
|
||||
link_control_sheet_code_delete, link_control_sheet_code_edit,
|
||||
link_control_sheet_code_list
|
||||
link_control_sheet_code_list, link_control_sheet_code_select
|
||||
)
|
||||
from .methods import method_document_submit, method_document_version_submit
|
||||
from .permissions import (
|
||||
@@ -50,16 +49,12 @@ class ControlCodesApp(MayanAppConfig):
|
||||
|
||||
def ready(self):
|
||||
super(ControlCodesApp, self).ready()
|
||||
from actstream import registry
|
||||
|
||||
ControlSheet = self.get_model(model_name='ControlSheet')
|
||||
ControlSheetCode = self.get_model(model_name='ControlSheetCode')
|
||||
Document = apps.get_model(
|
||||
app_label='documents', model_name='Document'
|
||||
)
|
||||
DocumentType = apps.get_model(
|
||||
app_label='documents', model_name='DocumentType'
|
||||
)
|
||||
DocumentVersion = apps.get_model(
|
||||
app_label='documents', model_name='DocumentVersion'
|
||||
)
|
||||
@@ -89,36 +84,33 @@ class ControlCodesApp(MayanAppConfig):
|
||||
attribute='label', is_identifier=True, is_sortable=True,
|
||||
source=ControlSheet
|
||||
)
|
||||
|
||||
SourceColumn(
|
||||
attribute='get_label', is_identifier=True,# is_sortable=True,
|
||||
attribute='get_label', is_identifier=True,
|
||||
source=ControlSheetCode
|
||||
)
|
||||
SourceColumn(
|
||||
attribute='order', is_sortable=True,
|
||||
source=ControlSheetCode
|
||||
attribute='order', is_sortable=True, source=ControlSheetCode
|
||||
)
|
||||
SourceColumn(
|
||||
attribute='arguments',
|
||||
source=ControlSheetCode
|
||||
attribute='arguments', source=ControlSheetCode
|
||||
)
|
||||
SourceColumn(
|
||||
attribute='enabled', source=ControlSheetCode
|
||||
)
|
||||
|
||||
menu_list_facet.bind_links(
|
||||
links=(
|
||||
link_acl_list, #link_events_for_object,
|
||||
#link_object_event_types_user_subcriptions_list,
|
||||
), sources=(ControlSheet,)
|
||||
links=(link_acl_list,), sources=(ControlSheet,)
|
||||
)
|
||||
menu_list_facet.bind_links(
|
||||
links=(
|
||||
link_control_sheet_code_list,
|
||||
link_control_sheet_preview, link_control_sheet_code_list,
|
||||
),
|
||||
sources=(ControlSheet,)
|
||||
)
|
||||
menu_object.bind_links(
|
||||
links=(
|
||||
link_control_sheet_edit, link_control_sheet_delete,
|
||||
link_control_sheet_preview,
|
||||
link_control_sheet_print,
|
||||
),
|
||||
sources=(ControlSheet,)
|
||||
)
|
||||
@@ -131,8 +123,16 @@ class ControlCodesApp(MayanAppConfig):
|
||||
menu_secondary.bind_links(
|
||||
links=(link_control_sheet_list, link_control_sheet_create),
|
||||
sources=(
|
||||
ControlSheet, 'control_sheet:control_sheet_list',
|
||||
'control_sheet:control_sheet_create'
|
||||
ControlSheet, 'control_codes:control_sheet_list',
|
||||
'control_codes:control_sheet_create'
|
||||
)
|
||||
)
|
||||
menu_secondary.bind_links(
|
||||
links=(link_control_sheet_code_select,),
|
||||
sources=(
|
||||
'control_codes:control_sheet_code_create',
|
||||
'control_codes:control_sheet_code_list',
|
||||
'control_codes:control_sheet_code_select', ControlSheetCode
|
||||
)
|
||||
)
|
||||
menu_setup.bind_links(
|
||||
|
||||
@@ -9,9 +9,7 @@ import qrcode
|
||||
from django.apps import apps
|
||||
from django.db import transaction
|
||||
from django.utils.encoding import force_text, python_2_unicode_compatible
|
||||
from django.utils.translation import (
|
||||
force_text, string_concat, ugettext_lazy as _
|
||||
)
|
||||
from django.utils.translation import string_concat, ugettext_lazy as _
|
||||
|
||||
from mayan.apps.common.serialization import yaml_dump, yaml_load
|
||||
from mayan.apps.documents.literals import DOCUMENT_IMAGE_TASK_TIMEOUT
|
||||
|
||||
@@ -2,7 +2,7 @@ from __future__ import unicode_literals
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from mayan.apps.dependencies.classes import BinaryDependency, PythonDependency
|
||||
from mayan.apps.dependencies.classes import PythonDependency
|
||||
|
||||
PythonDependency(
|
||||
copyright_text='''
|
||||
|
||||
@@ -6,15 +6,14 @@ from django import forms
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from mayan.apps.common.forms import DetailForm
|
||||
from mayan.apps.common.serialization import yaml_load
|
||||
|
||||
from .classes import ControlCode
|
||||
from .models import ControlSheet, ControlSheetCode
|
||||
from .models import ControlSheetCode
|
||||
|
||||
|
||||
class ControlSheetCodeClassSelectionForm(forms.Form):
|
||||
control_code = forms.ChoiceField(
|
||||
control_code_class_name = forms.ChoiceField(
|
||||
choices=(), help_text=_('Available control codes.'),
|
||||
label=_('Control code'),
|
||||
)
|
||||
@@ -23,37 +22,15 @@ class ControlSheetCodeClassSelectionForm(forms.Form):
|
||||
super(ControlSheetCodeClassSelectionForm, self).__init__(*args, **kwargs)
|
||||
|
||||
self.fields[
|
||||
'control_code'
|
||||
'control_code_class_name'
|
||||
].choices = ControlCode.get_choices()
|
||||
|
||||
|
||||
class ControlSheetCodeForm(forms.ModelForm):
|
||||
class Meta:
|
||||
fields = ('arguments', 'order')
|
||||
fields = ('arguments', 'order', 'enabled')
|
||||
model = ControlSheetCode
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
#control_code_name = kwargs.pop('control_code_name', None)
|
||||
super(ControlSheetCodeForm, self).__init__(*args, **kwargs)
|
||||
|
||||
"""
|
||||
if not control_code_name:
|
||||
# Get the template name when the control_code is being edited.
|
||||
template_name = getattr(
|
||||
self.instance.get_control_code_class(), 'template_name',
|
||||
None
|
||||
)
|
||||
else:
|
||||
# Get the template name when the control_code is being created
|
||||
template_name = getattr(
|
||||
BaseTransformation.get(name=control_code_name),
|
||||
'template_name', None
|
||||
)
|
||||
"""
|
||||
#if template_name:
|
||||
# self.fields['arguments'].widget.attrs['class'] = 'hidden'
|
||||
# self.fields['order'].widget.attrs['class'] = 'hidden'
|
||||
|
||||
def clean(self):
|
||||
try:
|
||||
yaml_load(stream=self.cleaned_data['arguments'])
|
||||
|
||||
@@ -1,17 +1,29 @@
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from mayan.apps.appearance.classes import Icon
|
||||
from mayan.apps.documents.icons import icon_document_type
|
||||
|
||||
icon_control_code = Icon(driver_name='fontawesome', symbol='qrcode')
|
||||
icon_control_code_create = Icon(
|
||||
driver_name='fontawesome-dual', primary_symbol='qrcode',
|
||||
secondary_symbol='plus'
|
||||
icon_control_sheet = Icon(
|
||||
driver_name='fontawesome-layers', data=[
|
||||
{'class': 'far fa-file ', 'transform': 'grow-4'},
|
||||
{'class': 'fas fa-barcode', 'transform': 'shrink-6'},
|
||||
],
|
||||
# shadow_class='far fa-file',
|
||||
)
|
||||
icon_control_code_delete = Icon(driver_name='fontawesome', symbol='times')
|
||||
icon_control_code_edit = Icon(driver_name='fontawesome', symbol='pencil-alt')
|
||||
icon_control_code_list = Icon(driver_name='fontawesome', symbol='qrcode')
|
||||
icon_control_code_preview = Icon(driver_name='fontawesome', symbol='print')
|
||||
icon_control_sheet_create = Icon(
|
||||
driver_name='fontawesome-layers', data=[
|
||||
{'class': 'far fa-file ', 'transform': 'grow-4'},
|
||||
{'class': 'fas fa-barcode', 'transform': 'shrink-6'},
|
||||
{'class': 'far fa-circle', 'transform': 'down-5 right-10'},
|
||||
{'class': 'fas fa-plus', 'transform': 'shrink-4 down-5 right-10'},
|
||||
],
|
||||
)
|
||||
icon_control_sheet_delete = Icon(driver_name='fontawesome', symbol='times')
|
||||
icon_control_sheet_edit = Icon(driver_name='fontawesome', symbol='pencil-alt')
|
||||
icon_control_sheet_list = icon_control_sheet
|
||||
icon_control_sheet_preview = Icon(driver_name='fontawesome', symbol='eye')
|
||||
icon_control_sheet_print = Icon(driver_name='fontawesome', symbol='print')
|
||||
|
||||
icon_control_sheet_code = Icon(driver_name='fontawesome', symbol='qrcode')
|
||||
icon_control_sheet_code_delete = Icon(
|
||||
driver_name='fontawesome', symbol='times'
|
||||
)
|
||||
@@ -21,3 +33,7 @@ icon_control_sheet_code_edit = Icon(
|
||||
icon_control_sheet_code_list = Icon(
|
||||
driver_name='fontawesome', symbol='qrcode'
|
||||
)
|
||||
icon_control_sheet_code_select = Icon(
|
||||
driver_name='fontawesome-dual', primary_symbol='qrcode',
|
||||
secondary_symbol='plus'
|
||||
)
|
||||
|
||||
@@ -2,43 +2,53 @@ from __future__ import unicode_literals
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from mayan.apps.documents.permissions import permission_document_type_edit
|
||||
from mayan.apps.navigation.classes import Link
|
||||
|
||||
from .icons import icon_control_code
|
||||
from .permissions import (
|
||||
permission_control_sheet_create, permission_control_sheet_delete,
|
||||
permission_control_sheet_edit, permission_control_sheet_view,
|
||||
)
|
||||
|
||||
link_control_sheet_create = Link(
|
||||
icon_class_path='mayan.apps.control_codes.icons.icon_control_code_create',
|
||||
icon_class_path='mayan.apps.control_codes.icons.icon_control_sheet_create',
|
||||
text=_('Create'), permissions=(permission_control_sheet_create,),
|
||||
view='control_codes:control_sheet_create'
|
||||
)
|
||||
link_control_sheet_delete = Link(
|
||||
icon_class_path='mayan.apps.control_codes.icons.icon_control_code_delete',
|
||||
icon_class_path='mayan.apps.control_codes.icons.icon_control_sheet_delete',
|
||||
kwargs={'control_sheet_id': 'resolved_object.pk'}, text=_('Delete'),
|
||||
permissions=(permission_control_sheet_delete,), tags='dangerous',
|
||||
view='control_codes:control_sheet_delete'
|
||||
)
|
||||
link_control_sheet_edit = Link(
|
||||
icon_class_path='mayan.apps.control_codes.icons.icon_control_code_edit',
|
||||
icon_class_path='mayan.apps.control_codes.icons.icon_control_sheet_edit',
|
||||
kwargs={'control_sheet_id': 'resolved_object.pk'}, text=_('Edit'),
|
||||
permissions=(permission_control_sheet_edit,),
|
||||
view='control_codes:control_sheet_edit'
|
||||
)
|
||||
link_control_sheet_list = Link(
|
||||
icon_class_path='mayan.apps.control_codes.icons.icon_control_code_list',
|
||||
icon_class_path='mayan.apps.control_codes.icons.icon_control_sheet_list',
|
||||
text=_('Control sheets'), view='control_codes:control_sheet_list'
|
||||
)
|
||||
link_control_sheet_preview = Link(
|
||||
icon_class_path='mayan.apps.control_codes.icons.icon_control_code_preview',
|
||||
icon_class_path='mayan.apps.control_codes.icons.icon_control_sheet_preview',
|
||||
kwargs={'control_sheet_id': 'resolved_object.pk'},
|
||||
text=_('Preview'), permissions=(permission_control_sheet_view,),
|
||||
view='control_codes:control_sheet_preview'
|
||||
)
|
||||
link_control_sheet_print = Link(
|
||||
icon_class_path='mayan.apps.control_codes.icons.icon_control_sheet_print',
|
||||
kwargs={'control_sheet_id': 'resolved_object.pk'},
|
||||
text=_('Print'), permissions=(permission_control_sheet_view,),
|
||||
view='control_codes:control_sheet_print'
|
||||
)
|
||||
|
||||
link_control_sheet_code_select = Link(
|
||||
icon_class_path='mayan.apps.control_codes.icons.icon_control_sheet_code_select',
|
||||
kwargs={'control_sheet_id': 'control_sheet.pk'}, text=_('Add new code'),
|
||||
permissions=(permission_control_sheet_edit,),
|
||||
view='control_codes:control_sheet_code_select'
|
||||
)
|
||||
link_control_sheet_code_delete = Link(
|
||||
icon_class_path='mayan.apps.control_codes.icons.icon_control_sheet_code_delete',
|
||||
kwargs={
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from .tasks import task_process_document_version
|
||||
|
||||
|
||||
|
||||
@@ -1,15 +1,11 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import hashlib
|
||||
import json
|
||||
import logging
|
||||
|
||||
from furl import furl
|
||||
|
||||
from django.apps import apps
|
||||
from django.conf import settings
|
||||
from django.contrib.contenttypes.fields import GenericForeignKey
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.core import serializers
|
||||
from django.db import models
|
||||
from django.db.models import Max
|
||||
@@ -32,9 +28,15 @@ logger = logging.getLogger(__name__)
|
||||
@python_2_unicode_compatible
|
||||
class ControlSheet(models.Model):
|
||||
label = models.CharField(
|
||||
help_text=_('Short text to describe the control sheet.'),
|
||||
max_length=196, unique=True, verbose_name=_('Label')
|
||||
)
|
||||
|
||||
class Meta:
|
||||
ordering = ('label',)
|
||||
verbose_name = _('Control sheet')
|
||||
verbose_name_plural = _('Control sheets')
|
||||
|
||||
def __str__(self):
|
||||
return self.label
|
||||
|
||||
@@ -45,10 +47,10 @@ class ControlSheet(models.Model):
|
||||
}
|
||||
)
|
||||
|
||||
class Meta:
|
||||
ordering = ('label',)
|
||||
verbose_name = _('Control sheet')
|
||||
verbose_name_plural = _('Control sheets')
|
||||
|
||||
class ControlSheetCodeBusinessLogicManager(models.Manager):
|
||||
def enabled(self):
|
||||
return self.filter(enabled=True)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
@@ -59,8 +61,8 @@ class ControlSheetCode(models.Model):
|
||||
)
|
||||
order = models.PositiveIntegerField(
|
||||
blank=True, db_index=True, default=0, help_text=_(
|
||||
'Order in which the control codes will be interpreted. If left '
|
||||
'unchanged, an automatic order value will be assigned.'
|
||||
'Order in which the control sheet codes will be interpreted. '
|
||||
'If left unchanged, an automatic order value will be assigned.'
|
||||
), verbose_name=_('Order')
|
||||
)
|
||||
name = models.CharField(
|
||||
@@ -69,12 +71,15 @@ class ControlSheetCode(models.Model):
|
||||
)
|
||||
arguments = models.TextField(
|
||||
blank=True, help_text=_(
|
||||
'The arguments for the control code as a YAML '
|
||||
'The arguments for the control sheet code as a YAML '
|
||||
'dictionary.'
|
||||
), validators=[YAMLValidator()], verbose_name=_('Arguments')
|
||||
)
|
||||
enabled = models.BooleanField(default=True, verbose_name=_('Enabled'))
|
||||
|
||||
business_logic = ControlSheetCodeBusinessLogicManager()
|
||||
objects = models.Manager()
|
||||
|
||||
class Meta:
|
||||
ordering = ('order',)
|
||||
verbose_name = _('Control sheet code')
|
||||
@@ -97,7 +102,7 @@ class ControlSheetCode(models.Model):
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
self.cache_partition.delete()
|
||||
return super(Workflow, self).delete(*args, **kwargs)
|
||||
return super(ControlSheetCode, self).delete(*args, **kwargs)
|
||||
|
||||
def generate_image(self):
|
||||
cache_filename = '{}'.format(self.get_hash())
|
||||
|
||||
@@ -1,25 +1,17 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.core.exceptions import ValidationError as DjangoValidationError
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from rest_framework import serializers
|
||||
from rest_framework.exceptions import ValidationError
|
||||
from rest_framework.reverse import reverse
|
||||
|
||||
from mayan.apps.documents.models import DocumentType
|
||||
from mayan.apps.documents.serializers import DocumentTypeSerializer
|
||||
from mayan.apps.rest_api.relations import (
|
||||
FilteredPrimaryKeyRelatedField, MultiKwargHyperlinkedIdentityField
|
||||
)
|
||||
from mayan.apps.user_management.serializers import UserSerializer
|
||||
|
||||
from .models import ControlSheet, ControlSheetCode
|
||||
|
||||
|
||||
class ControlSheetSerializer(serializers.HyperlinkedModelSerializer):
|
||||
#states = ControlSheetStateSerializer(many=True, required=False)
|
||||
|
||||
#codes = ControlSheetCodeSerializer(many=True, required=False)
|
||||
code_list_url = serializers.HyperlinkedIdentityField(
|
||||
lookup_url_kwarg='control_sheet_id',
|
||||
view_name='rest_api:controlsheet-code-list'
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<ul class="list-inline text-center">
|
||||
{% for code in object.codes.enabled %}
|
||||
<li class="list-inline-item">
|
||||
<img class="img-responsive" src="{{ code.get_api_image_url }}" />
|
||||
<p class="text-center">{{ code.get_label }}</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
{% extends 'appearance/base.html' %}
|
||||
|
||||
{% block content %}
|
||||
{% include 'control_codes/control_sheet_content.html' %}
|
||||
{% endblock %}
|
||||
@@ -25,12 +25,5 @@
|
||||
</style>
|
||||
|
||||
<h1 class="text-center">{{ title }}</h1>
|
||||
<ul class="list-inline text-center">
|
||||
{% for code in object.codes.all %}
|
||||
<li class="list-inline-item">
|
||||
<img class="img-responsive" src="{{ code.get_api_image_url }}" />
|
||||
<p class="text-center">{{ code.get_label }}</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% include 'control_codes/control_sheet_content.html' %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
<img class="img-responsive" name="{{ widget.name }}" {% include "django/forms/widgets/attrs.html" %} src="{{ widget.value.get_api_image_url }}" style="margin:auto;" />
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
|
||||
@@ -1,5 +1 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -9,9 +9,10 @@ from .api_views import (
|
||||
)
|
||||
from .views import (
|
||||
ControlSheetCreateView, ControlSheetDeleteView, ControlSheetEditView,
|
||||
ControlSheetListView, ControlSheetPreviewView,
|
||||
|
||||
ControlSheetCodeDeleteView, ControlSheetCodeEditView, ControlSheetCodeListView
|
||||
ControlSheetListView, ControlSheetPreviewView, ControlSheetPrintView,
|
||||
ControlSheetCodeCreate, ControlSheetCodeDeleteView,
|
||||
ControlSheetCodeEditView, ControlSheetCodeListView,
|
||||
ControlSheetCodeSelectView
|
||||
)
|
||||
|
||||
urlpatterns = [
|
||||
@@ -27,6 +28,14 @@ urlpatterns = [
|
||||
regex=r'^control_sheets/(?P<control_sheet_id>\d+)/codes/$',
|
||||
view=ControlSheetCodeListView.as_view(), name='control_sheet_code_list'
|
||||
),
|
||||
url(
|
||||
regex=r'^control_sheets/(?P<control_sheet_id>\d+)/codes/select/$',
|
||||
view=ControlSheetCodeSelectView.as_view(), name='control_sheet_code_select'
|
||||
),
|
||||
url(
|
||||
regex=r'^control_sheets/(?P<control_sheet_id>\d+)/codes/(?P<control_code_class_name>[-_\w]+)/create/$',
|
||||
view=ControlSheetCodeCreate.as_view(), name='control_sheet_code_create'
|
||||
),
|
||||
url(
|
||||
regex=r'^control_sheets/(?P<control_sheet_id>\d+)/codes/(?P<control_sheet_code_id>\d+)/edit/$',
|
||||
view=ControlSheetCodeEditView.as_view(), name='control_sheet_code_edit'
|
||||
@@ -47,6 +56,10 @@ urlpatterns = [
|
||||
regex=r'^control_sheets/(?P<control_sheet_id>\d+)/preview/$',
|
||||
view=ControlSheetPreviewView.as_view(), name='control_sheet_preview'
|
||||
),
|
||||
url(
|
||||
regex=r'^control_sheets/(?P<control_sheet_id>\d+)/print/$',
|
||||
view=ControlSheetPrintView.as_view(), name='control_sheet_print'
|
||||
),
|
||||
]
|
||||
|
||||
api_urls = [
|
||||
|
||||
@@ -8,13 +8,15 @@ from django.urls import reverse
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from mayan.apps.common.generics import (
|
||||
FormView, SimpleView, SingleObjectCreateView, SingleObjectDeleteView,
|
||||
FormView, SingleObjectCreateView, SingleObjectDeleteView,
|
||||
SingleObjectDetailView, SingleObjectEditView, SingleObjectListView
|
||||
)
|
||||
from mayan.apps.common.mixins import ExternalObjectMixin
|
||||
|
||||
from .classes import ControlCode
|
||||
from .forms import ControlSheetCodeClassSelectionForm, ControlSheetCodeForm
|
||||
from .links import link_control_sheet_create
|
||||
from .icons import icon_control_sheet, icon_control_sheet_code
|
||||
from .links import link_control_sheet_create, link_control_sheet_code_select
|
||||
from .models import ControlSheet
|
||||
from .permissions import (
|
||||
permission_control_sheet_create, permission_control_sheet_delete,
|
||||
@@ -26,18 +28,13 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
class ControlSheetCreateView(SingleObjectCreateView):
|
||||
fields = ('label',)
|
||||
|
||||
model = ControlSheet
|
||||
object_permission = permission_control_sheet_create
|
||||
#template_name = 'control_codes/control_sheet_print.html'
|
||||
|
||||
#def get_extra_context(self):
|
||||
# return {
|
||||
# 'object': self.object,
|
||||
# 'title': _(
|
||||
# 'Control sheet: %s'
|
||||
# ) % self.object
|
||||
# }
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'title': _('Create new control sheet')
|
||||
}
|
||||
|
||||
|
||||
class ControlSheetDeleteView(SingleObjectDeleteView):
|
||||
@@ -76,16 +73,15 @@ class ControlSheetListView(SingleObjectListView):
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'hide_object': True,
|
||||
#'no_results_icon': self.layer.get_icon(),
|
||||
'no_results_icon': icon_control_sheet,
|
||||
'no_results_main_link': link_control_sheet_create.resolve(
|
||||
context=RequestContext(
|
||||
request=self.request, #dict_={
|
||||
#'resolved_object': self.external_object,
|
||||
#'layer_name': self.kwargs['layer_name'],
|
||||
#}
|
||||
)
|
||||
context=RequestContext(request=self.request,)
|
||||
),
|
||||
'no_results_text': _(
|
||||
'Control sheets contain barcodes that are scanned together '
|
||||
'with the document to automate how that document will be '
|
||||
'processed.'
|
||||
),
|
||||
#'no_results_text': self.layer.get_empty_results_text(),
|
||||
'no_results_title': _('There are no control sheets'),
|
||||
'title': _('Control sheets')
|
||||
}
|
||||
@@ -96,6 +92,18 @@ class ControlSheetPreviewView(SingleObjectDetailView):
|
||||
pk_url_kwarg = 'control_sheet_id'
|
||||
model = ControlSheet
|
||||
object_permission = permission_control_sheet_view
|
||||
template_name = 'control_codes/control_sheet_preview.html'
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'object': self.object,
|
||||
'title': _(
|
||||
'Preview of control sheet: %s'
|
||||
) % self.object
|
||||
}
|
||||
|
||||
|
||||
class ControlSheetPrintView(ControlSheetPreviewView):
|
||||
template_name = 'control_codes/control_sheet_print.html'
|
||||
|
||||
def get_extra_context(self):
|
||||
@@ -107,6 +115,51 @@ class ControlSheetPreviewView(SingleObjectDetailView):
|
||||
}
|
||||
|
||||
|
||||
class ControlSheetCodeCreate(ExternalObjectMixin, SingleObjectCreateView):
|
||||
external_object_class = ControlSheet
|
||||
external_object_permission = permission_control_sheet_edit
|
||||
external_object_pk_url_kwarg = 'control_sheet_id'
|
||||
form_class = ControlSheetCodeForm
|
||||
|
||||
def form_valid(self, form):
|
||||
instance = form.save(commit=False)
|
||||
instance.control_sheet = self.external_object
|
||||
instance.name = self.kwargs['control_code_class_name']
|
||||
try:
|
||||
instance.full_clean()
|
||||
instance.save()
|
||||
except Exception as exception:
|
||||
logger.debug('Invalid form, exception: %s', exception)
|
||||
return super(ControlSheetCodeCreate, self).form_invalid(form)
|
||||
else:
|
||||
return super(ControlSheetCodeCreate, self).form_valid(form)
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'control_sheet': self.external_object,
|
||||
'navigation_object_list': ('control_sheet',),
|
||||
'title': _(
|
||||
'Create code "%(control_code)s" for: %(control_sheet)s'
|
||||
) % {
|
||||
'control_code': self.get_control_code_class(),
|
||||
'control_sheet': self.external_object,
|
||||
}
|
||||
}
|
||||
|
||||
def get_post_action_redirect(self):
|
||||
return reverse(
|
||||
viewname='control_codes:control_sheet_code_list', kwargs={
|
||||
'control_sheet_id': self.external_object.pk,
|
||||
}
|
||||
)
|
||||
|
||||
def get_source_queryset(self):
|
||||
return self.external_object.codes.all()
|
||||
|
||||
def get_control_code_class(self):
|
||||
return ControlCode.get(name=self.kwargs['control_code_class_name'])
|
||||
|
||||
|
||||
class ControlSheetCodeDeleteView(ExternalObjectMixin, SingleObjectDeleteView):
|
||||
form_class = ControlSheetCodeForm
|
||||
external_object_class = ControlSheet
|
||||
@@ -157,7 +210,19 @@ class ControlSheetCodeListView(ExternalObjectMixin, SingleObjectListView):
|
||||
'control_sheet': self.external_object,
|
||||
'hide_object': True,
|
||||
'navigation_object_list': ('control_sheet',),
|
||||
#'object': self.external_object,
|
||||
'no_results_icon': icon_control_sheet_code,
|
||||
'no_results_main_link': link_control_sheet_code_select.resolve(
|
||||
context=RequestContext(
|
||||
request=self.request, dict_={
|
||||
'control_sheet': self.external_object,
|
||||
}
|
||||
)
|
||||
),
|
||||
'no_results_text': _(
|
||||
'Control sheet codes are barcodes that trigger a specific '
|
||||
'process when they are scanned.'
|
||||
),
|
||||
'no_results_title': _('There are no control sheet codes'),
|
||||
'title': _('Codes of control sheet: %s') % self.external_object,
|
||||
}
|
||||
|
||||
@@ -165,238 +230,21 @@ class ControlSheetCodeListView(ExternalObjectMixin, SingleObjectListView):
|
||||
return self.external_object.codes.all()
|
||||
|
||||
|
||||
|
||||
"""
|
||||
class TransformationCreateView(
|
||||
LayerViewMixin, ExternalContentTypeObjectMixin, SingleObjectCreateView
|
||||
):
|
||||
form_class = LayerTransformationForm
|
||||
|
||||
def form_valid(self, form):
|
||||
layer = self.layer
|
||||
content_type = self.get_content_type()
|
||||
object_layer, created = ObjectLayer.objects.get_or_create(
|
||||
content_type=content_type, object_id=self.external_object.pk,
|
||||
stored_layer=layer.stored_layer
|
||||
)
|
||||
|
||||
instance = form.save(commit=False)
|
||||
instance.content_object = self.external_object
|
||||
instance.name = self.kwargs['transformation_name']
|
||||
instance.object_layer = object_layer
|
||||
try:
|
||||
instance.full_clean()
|
||||
instance.save()
|
||||
except Exception as exception:
|
||||
logger.debug('Invalid form, exception: %s', exception)
|
||||
return super(TransformationCreateView, self).form_invalid(form)
|
||||
else:
|
||||
return super(TransformationCreateView, self).form_valid(form)
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'content_object': self.external_object,
|
||||
'form_field_css_classes': 'hidden' if hasattr(
|
||||
self.get_transformation_class(), 'template_name'
|
||||
) else '',
|
||||
'layer': self.layer,
|
||||
'layer_name': self.layer.name,
|
||||
'navigation_object_list': ('content_object',),
|
||||
'title': _(
|
||||
'Create layer "%(layer)s" transformation '
|
||||
'"%(transformation)s" for: %(object)s'
|
||||
) % {
|
||||
'layer': self.layer,
|
||||
'transformation': self.get_transformation_class(),
|
||||
'object': self.external_object,
|
||||
}
|
||||
}
|
||||
|
||||
def get_form_extra_kwargs(self):
|
||||
return {
|
||||
'transformation_name': self.kwargs['transformation_name']
|
||||
}
|
||||
|
||||
def get_external_object_permission(self):
|
||||
return self.layer.permissions.get('create', None)
|
||||
|
||||
def get_post_action_redirect(self):
|
||||
return reverse(
|
||||
viewname='converter:transformation_list', kwargs={
|
||||
'app_label': self.kwargs['app_label'],
|
||||
'model': self.kwargs['model'],
|
||||
'object_id': self.kwargs['object_id'],
|
||||
'layer_name': self.kwargs['layer_name']
|
||||
}
|
||||
)
|
||||
|
||||
def get_queryset(self):
|
||||
return self.layer.get_transformations_for(
|
||||
obj=self.content_object
|
||||
)
|
||||
|
||||
def get_template_names(self):
|
||||
return [
|
||||
getattr(
|
||||
self.get_transformation_class(), 'template_name',
|
||||
self.template_name
|
||||
)
|
||||
]
|
||||
|
||||
def get_transformation_class(self):
|
||||
return BaseTransformation.get(name=self.kwargs['transformation_name'])
|
||||
|
||||
|
||||
class TransformationDeleteView(LayerViewMixin, SingleObjectDeleteView):
|
||||
model = LayerTransformation
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'content_object': self.object.object_layer.content_object,
|
||||
'layer_name': self.layer.name,
|
||||
'navigation_object_list': ('content_object', 'transformation'),
|
||||
'previous': reverse(
|
||||
viewname='converter:transformation_list', kwargs={
|
||||
'app_label': self.object.object_layer.content_type.app_label,
|
||||
'model': self.object.object_layer.content_type.model,
|
||||
'object_id': self.object.object_layer.object_id,
|
||||
'layer_name': self.object.object_layer.stored_layer.name
|
||||
}
|
||||
),
|
||||
'title': _(
|
||||
'Delete transformation "%(transformation)s" for: '
|
||||
'%(content_object)s?'
|
||||
) % {
|
||||
'transformation': self.object,
|
||||
'content_object': self.object.object_layer.content_object
|
||||
},
|
||||
'transformation': self.object,
|
||||
}
|
||||
|
||||
def get_object_permission(self):
|
||||
return self.layer.permissions.get('delete', None)
|
||||
|
||||
def get_post_action_redirect(self):
|
||||
return reverse(
|
||||
viewname='converter:transformation_list', kwargs={
|
||||
'app_label': self.object.object_layer.content_type.app_label,
|
||||
'model': self.object.object_layer.content_type.model,
|
||||
'object_id': self.object.object_layer.object_id,
|
||||
'layer_name': self.object.object_layer.stored_layer.name
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
class TransformationEditView(LayerViewMixin, SingleObjectEditView):
|
||||
form_class = LayerTransformationForm
|
||||
model = LayerTransformation
|
||||
|
||||
def form_valid(self, form):
|
||||
instance = form.save(commit=False)
|
||||
try:
|
||||
instance.full_clean()
|
||||
instance.save()
|
||||
except Exception as exception:
|
||||
logger.debug('Invalid form, exception: %s', exception)
|
||||
return super(TransformationEditView, self).form_invalid(form=form)
|
||||
else:
|
||||
return super(TransformationEditView, self).form_valid(form=form)
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'content_object': self.object.object_layer.content_object,
|
||||
'form_field_css_classes': 'hidden' if hasattr(
|
||||
self.object.get_transformation_class(), 'template_name'
|
||||
) else '',
|
||||
'layer': self.layer,
|
||||
'layer_name': self.layer.name,
|
||||
'navigation_object_list': ('content_object', 'transformation'),
|
||||
'title': _(
|
||||
'Edit transformation "%(transformation)s" '
|
||||
'for: %(content_object)s'
|
||||
) % {
|
||||
'transformation': self.object,
|
||||
'content_object': self.object.object_layer.content_object
|
||||
},
|
||||
'transformation': self.object,
|
||||
}
|
||||
|
||||
def get_object_permission(self):
|
||||
return self.layer.permissions.get('edit', None)
|
||||
|
||||
def get_post_action_redirect(self):
|
||||
return reverse(
|
||||
viewname='converter:transformation_list', kwargs={
|
||||
'app_label': self.object.object_layer.content_type.app_label,
|
||||
'model': self.object.object_layer.content_type.model,
|
||||
'object_id': self.object.object_layer.object_id,
|
||||
'layer_name': self.object.object_layer.stored_layer.name
|
||||
}
|
||||
)
|
||||
|
||||
def get_template_names(self):
|
||||
return [
|
||||
getattr(
|
||||
self.object.get_transformation_class(), 'template_name',
|
||||
self.template_name
|
||||
)
|
||||
]
|
||||
|
||||
|
||||
class TransformationListView(
|
||||
LayerViewMixin, ExternalContentTypeObjectMixin, SingleObjectListView
|
||||
):
|
||||
def get_external_object_permission(self):
|
||||
return self.layer.permissions.get('view', None)
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'object': self.external_object,
|
||||
'hide_link': True,
|
||||
'hide_object': True,
|
||||
'layer_name': self.layer.name,
|
||||
'no_results_icon': self.layer.get_icon(),
|
||||
'no_results_main_link': link_transformation_select.resolve(
|
||||
context=RequestContext(
|
||||
request=self.request, dict_={
|
||||
'resolved_object': self.external_object,
|
||||
'layer_name': self.kwargs['layer_name'],
|
||||
}
|
||||
)
|
||||
),
|
||||
'no_results_text': self.layer.get_empty_results_text(),
|
||||
'no_results_title': _(
|
||||
'There are no entries for layer "%(layer_name)s"'
|
||||
) % {'layer_name': self.layer.label},
|
||||
'title': _(
|
||||
'Layer "%(layer)s" transformations for: %(object)s'
|
||||
) % {
|
||||
'layer': self.layer,
|
||||
'object': self.external_object,
|
||||
}
|
||||
}
|
||||
|
||||
def get_source_queryset(self):
|
||||
return self.layer.get_transformations_for(obj=self.external_object)
|
||||
|
||||
|
||||
class TransformationSelectView(
|
||||
ExternalContentTypeObjectMixin, LayerViewMixin, FormView
|
||||
):
|
||||
form_class = LayerTransformationSelectForm
|
||||
class ControlSheetCodeSelectView(ExternalObjectMixin, FormView):
|
||||
external_object_class = ControlSheet
|
||||
external_object_permission = permission_control_sheet_edit
|
||||
external_object_pk_url_kwarg = 'control_sheet_id'
|
||||
form_class = ControlSheetCodeClassSelectionForm
|
||||
template_name = 'appearance/generic_form.html'
|
||||
|
||||
def form_valid(self, form):
|
||||
return HttpResponseRedirect(
|
||||
redirect_to=reverse(
|
||||
viewname='converter:transformation_create',
|
||||
viewname='control_codes:control_sheet_code_create',
|
||||
kwargs={
|
||||
'app_label': self.kwargs['app_label'],
|
||||
'model': self.kwargs['model'],
|
||||
'object_id': self.kwargs['object_id'],
|
||||
'layer_name': self.kwargs['layer_name'],
|
||||
'transformation_name': form.cleaned_data[
|
||||
'transformation'
|
||||
'control_sheet_id': self.external_object.pk,
|
||||
'control_code_class_name': form.cleaned_data[
|
||||
'control_code_class_name'
|
||||
]
|
||||
}
|
||||
)
|
||||
@@ -404,22 +252,13 @@ class TransformationSelectView(
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'layer': self.layer,
|
||||
'layer_name': self.kwargs['layer_name'],
|
||||
'navigation_object_list': ('content_object',),
|
||||
'content_object': self.external_object,
|
||||
'control_sheet': self.external_object,
|
||||
'navigation_object_list': ('control_sheet',),
|
||||
'submit_label': _('Select'),
|
||||
'title': _(
|
||||
'Select new layer "%(layer)s" transformation '
|
||||
'for: %(object)s'
|
||||
'Select new control sheet code '
|
||||
'for: %(control_sheet)s'
|
||||
) % {
|
||||
'layer': self.layer,
|
||||
'object': self.external_object,
|
||||
'control_sheet': self.external_object,
|
||||
}
|
||||
}
|
||||
|
||||
def get_form_extra_kwargs(self):
|
||||
return {
|
||||
'layer': self.layer
|
||||
}
|
||||
"""
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django import forms
|
||||
|
||||
|
||||
class ControlSheetCodeImageWidget(forms.widgets.Widget):
|
||||
template_name = 'control_codes/forms/widgets/control_sheet_code_image.html'
|
||||
|
||||
def format_value(self, value):
|
||||
if value == '' or value is None:
|
||||
return None
|
||||
return value
|
||||
Reference in New Issue
Block a user