265 lines
8.7 KiB
Python
265 lines
8.7 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, SingleObjectCreateView, SingleObjectDeleteView,
|
|
SingleObjectDetailView, SingleObjectEditView, SingleObjectListView
|
|
)
|
|
from mayan.apps.common.mixins import ExternalObjectMixin
|
|
|
|
from .classes import ControlCode
|
|
from .forms import ControlSheetCodeClassSelectionForm, ControlSheetCodeForm
|
|
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,
|
|
permission_control_sheet_edit, permission_control_sheet_view
|
|
)
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class ControlSheetCreateView(SingleObjectCreateView):
|
|
fields = ('label',)
|
|
model = ControlSheet
|
|
view_permission = permission_control_sheet_create
|
|
|
|
def get_extra_context(self):
|
|
return {
|
|
'title': _('Create new control sheet')
|
|
}
|
|
|
|
|
|
class ControlSheetDeleteView(SingleObjectDeleteView):
|
|
model = ControlSheet
|
|
object_permission = permission_control_sheet_delete
|
|
pk_url_kwarg = 'control_sheet_id'
|
|
|
|
def get_extra_context(self):
|
|
return {
|
|
'object': self.object,
|
|
'title': _(
|
|
'Delete control sheet: %s?'
|
|
) % self.object
|
|
}
|
|
|
|
|
|
class ControlSheetEditView(SingleObjectEditView):
|
|
fields = ('label',)
|
|
model = ControlSheet
|
|
object_permission = permission_control_sheet_edit
|
|
pk_url_kwarg = 'control_sheet_id'
|
|
|
|
def get_extra_context(self):
|
|
return {
|
|
'object': self.object,
|
|
'title': _(
|
|
'Edit control sheet: %s'
|
|
) % self.object
|
|
}
|
|
|
|
|
|
class ControlSheetListView(SingleObjectListView):
|
|
model = ControlSheet
|
|
object_permission = permission_control_sheet_view
|
|
|
|
def get_extra_context(self):
|
|
return {
|
|
'hide_object': True,
|
|
'no_results_icon': icon_control_sheet,
|
|
'no_results_main_link': link_control_sheet_create.resolve(
|
|
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_title': _('There are no control sheets'),
|
|
'title': _('Control sheets')
|
|
}
|
|
|
|
|
|
class ControlSheetPreviewView(SingleObjectDetailView):
|
|
fields = ('label',)
|
|
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):
|
|
return {
|
|
'object': self.object,
|
|
'title': _(
|
|
'Control sheet: %s'
|
|
) % self.object
|
|
}
|
|
|
|
|
|
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
|
|
external_object_permission = permission_control_sheet_edit
|
|
external_object_pk_url_kwarg = 'control_sheet_id'
|
|
pk_url_kwarg = 'control_sheet_code_id'
|
|
|
|
def get_extra_context(self):
|
|
return {
|
|
'control_sheet': self.external_object,
|
|
'hide_object': True,
|
|
'navigation_object_list': ('control_sheet', 'object',),
|
|
'object': self.object,
|
|
'title': _('Delete control sheet code: %s') % self.object,
|
|
}
|
|
|
|
def get_source_queryset(self):
|
|
return self.external_object.codes.all()
|
|
|
|
|
|
class ControlSheetCodeEditView(ExternalObjectMixin, SingleObjectEditView):
|
|
form_class = ControlSheetCodeForm
|
|
external_object_class = ControlSheet
|
|
external_object_permission = permission_control_sheet_edit
|
|
external_object_pk_url_kwarg = 'control_sheet_id'
|
|
pk_url_kwarg = 'control_sheet_code_id'
|
|
|
|
def get_extra_context(self):
|
|
return {
|
|
'control_sheet': self.external_object,
|
|
'hide_object': True,
|
|
'navigation_object_list': ('control_sheet', 'object',),
|
|
'object': self.object,
|
|
'title': _('Edit control sheet code: %s') % self.object,
|
|
}
|
|
|
|
def get_source_queryset(self):
|
|
return self.external_object.codes.all()
|
|
|
|
|
|
class ControlSheetCodeListView(ExternalObjectMixin, SingleObjectListView):
|
|
external_object_class = ControlSheet
|
|
external_object_permission = permission_control_sheet_view
|
|
external_object_pk_url_kwarg = 'control_sheet_id'
|
|
|
|
def get_extra_context(self):
|
|
return {
|
|
'control_sheet': self.external_object,
|
|
'hide_object': True,
|
|
'navigation_object_list': ('control_sheet',),
|
|
'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,
|
|
}
|
|
|
|
def get_source_queryset(self):
|
|
return self.external_object.codes.all()
|
|
|
|
|
|
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='control_codes:control_sheet_code_create',
|
|
kwargs={
|
|
'control_sheet_id': self.external_object.pk,
|
|
'control_code_class_name': form.cleaned_data[
|
|
'control_code_class_name'
|
|
]
|
|
}
|
|
)
|
|
)
|
|
|
|
def get_extra_context(self):
|
|
return {
|
|
'control_sheet': self.external_object,
|
|
'navigation_object_list': ('control_sheet',),
|
|
'submit_label': _('Select'),
|
|
'title': _(
|
|
'Select new control sheet code '
|
|
'for: %(control_sheet)s'
|
|
) % {
|
|
'control_sheet': self.external_object,
|
|
}
|
|
}
|