Add code selecton and create views

Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
This commit is contained in:
HGWells
2019-09-04 07:40:40 -04:00
committed by Roberto Rosario
parent 1315a74e27
commit 3872db8c9f
19 changed files with 219 additions and 401 deletions

View File

@@ -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()

View File

@@ -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(

View File

@@ -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

View File

@@ -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='''

View File

@@ -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'])

View File

@@ -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'
)

View File

@@ -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={

View File

@@ -1,7 +1,5 @@
from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _
from .tasks import task_process_document_version

View File

@@ -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())

View File

@@ -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'

View File

@@ -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>

View File

@@ -0,0 +1,5 @@
{% extends 'appearance/base.html' %}
{% block content %}
{% include 'control_codes/control_sheet_content.html' %}
{% endblock %}

View File

@@ -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 %}

View File

@@ -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;" />

View File

@@ -1,2 +1 @@
from __future__ import unicode_literals

View File

@@ -1,5 +1 @@
from __future__ import unicode_literals

View File

@@ -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 = [

View File

@@ -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
}
"""

View File

@@ -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