Files
mayan-edms/mayan/apps/control_codes/views.py
Roberto Rosario f9ba08ee59 Add control code preview generation
Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
2019-09-01 14:35:04 -04:00

295 lines
10 KiB
Python

from __future__ import absolute_import, unicode_literals
import logging
from django.http import HttpResponseRedirect
from django.template import RequestContext
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from mayan.apps.common.generics import (
FormView, SimpleView, SingleObjectCreateView, SingleObjectDeleteView,
SingleObjectDetailView, SingleObjectEditView, SingleObjectListView
)
from mayan.apps.common.mixins import ExternalContentTypeObjectMixin
from .forms import ControlCodeClassSelectionForm
#from .links import link_transformation_select
from .models import ControlSheet
#from .transformations import BaseTransformation
logger = logging.getLogger(__name__)
class ControlSheetDetailView(SingleObjectDetailView):
fields = ('label',)
pk_url_kwarg = 'control_sheet_id'
model = ControlSheet
def get_extra_context(self):
return {
'object': self.object,
'title': _(
'Details for control sheet: %s'
) % self.object
}
"""
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
template_name = 'appearance/generic_form.html'
def form_valid(self, form):
return HttpResponseRedirect(
redirect_to=reverse(
viewname='converter:transformation_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'
]
}
)
)
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,
'submit_label': _('Select'),
'title': _(
'Select new layer "%(layer)s" transformation '
'for: %(object)s'
) % {
'layer': self.layer,
'object': self.external_object,
}
}
def get_form_extra_kwargs(self):
return {
'layer': self.layer
}
"""