Add control sheet codes views
Add list, edit, delete views. Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
This commit is contained in:
@@ -28,7 +28,10 @@ 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_code_delete, link_control_sheet_code_edit,
|
||||
link_control_sheet_code_list
|
||||
)
|
||||
from .methods import method_document_submit, method_document_version_submit
|
||||
from .permissions import (
|
||||
@@ -87,6 +90,19 @@ class ControlCodesApp(MayanAppConfig):
|
||||
source=ControlSheet
|
||||
)
|
||||
|
||||
SourceColumn(
|
||||
attribute='get_label', is_identifier=True,# is_sortable=True,
|
||||
source=ControlSheetCode
|
||||
)
|
||||
SourceColumn(
|
||||
attribute='order', is_sortable=True,
|
||||
source=ControlSheetCode
|
||||
)
|
||||
SourceColumn(
|
||||
attribute='arguments',
|
||||
source=ControlSheetCode
|
||||
)
|
||||
|
||||
menu_list_facet.bind_links(
|
||||
links=(
|
||||
link_acl_list, #link_events_for_object,
|
||||
@@ -95,16 +111,23 @@ class ControlCodesApp(MayanAppConfig):
|
||||
)
|
||||
menu_list_facet.bind_links(
|
||||
links=(
|
||||
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,
|
||||
),
|
||||
sources=(ControlSheet,)
|
||||
)
|
||||
menu_object.bind_links(
|
||||
links=(
|
||||
link_control_sheet_code_delete, link_control_sheet_code_edit,
|
||||
),
|
||||
sources=(ControlSheetCode,)
|
||||
)
|
||||
menu_secondary.bind_links(
|
||||
links=(link_control_sheet_list, link_control_sheet_create),
|
||||
sources=(
|
||||
|
||||
@@ -13,100 +13,46 @@ from .classes import ControlCode
|
||||
from .models import ControlSheet, ControlSheetCode
|
||||
|
||||
|
||||
class ControlCodeClassSelectionForm(forms.Form):
|
||||
class ControlSheetCodeClassSelectionForm(forms.Form):
|
||||
control_code = forms.ChoiceField(
|
||||
choices=(), help_text=_('Available control codes.'),
|
||||
label=_('Control code'),
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(ControlCodeClassSelectionForm, self).__init__(*args, **kwargs)
|
||||
super(ControlSheetCodeClassSelectionForm, self).__init__(*args, **kwargs)
|
||||
|
||||
self.fields[
|
||||
'control_code'
|
||||
].choices = ControlCode.get_choices()
|
||||
|
||||
"""
|
||||
class ControlSheetDetailForm(DetailForm):
|
||||
'''
|
||||
def __init__(self, *args, **kwargs):
|
||||
document = kwargs['instance']
|
||||
|
||||
extra_fields = [
|
||||
{
|
||||
'label': _('Date added'),
|
||||
'field': 'date_added',
|
||||
'widget': forms.widgets.DateTimeInput
|
||||
},
|
||||
{'label': _('UUID'), 'field': 'uuid'},
|
||||
{
|
||||
'label': _('Language'),
|
||||
'field': lambda x: get_language(language_code=document.language)
|
||||
},
|
||||
]
|
||||
|
||||
if document.latest_version:
|
||||
extra_fields += (
|
||||
{
|
||||
'label': _('File mimetype'),
|
||||
'field': lambda x: document.file_mimetype or _('None')
|
||||
},
|
||||
{
|
||||
'label': _('File encoding'),
|
||||
'field': lambda x: document.file_mime_encoding or _(
|
||||
'None'
|
||||
)
|
||||
},
|
||||
{
|
||||
'label': _('File size'),
|
||||
'field': lambda document: filesizeformat(
|
||||
document.size
|
||||
) if document.size else '-'
|
||||
},
|
||||
{'label': _('Exists in storage'), 'field': 'exists'},
|
||||
{
|
||||
'label': _('File path in storage'),
|
||||
'field': 'latest_version.file'
|
||||
},
|
||||
{'label': _('Checksum'), 'field': 'checksum'},
|
||||
{'label': _('Pages'), 'field': 'page_count'},
|
||||
)
|
||||
|
||||
kwargs['extra_fields'] = extra_fields
|
||||
super(DocumentPropertiesForm, self).__init__(*args, **kwargs)
|
||||
'''
|
||||
class Meta:
|
||||
fields = ('label', 'codes')
|
||||
model = ControlSheet
|
||||
|
||||
"""
|
||||
|
||||
"""
|
||||
class ControlSheetCodeForm(forms.ModelForm):
|
||||
class Meta:
|
||||
fields = ('arguments', 'order')
|
||||
model = LayerTransformation
|
||||
model = ControlSheetCode
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
transformation_name = kwargs.pop('transformation_name', None)
|
||||
super(LayerTransformationForm, self).__init__(*args, **kwargs)
|
||||
#control_code_name = kwargs.pop('control_code_name', None)
|
||||
super(ControlSheetCodeForm, self).__init__(*args, **kwargs)
|
||||
|
||||
if not transformation_name:
|
||||
# Get the template name when the transformation is being edited.
|
||||
"""
|
||||
if not control_code_name:
|
||||
# Get the template name when the control_code is being edited.
|
||||
template_name = getattr(
|
||||
self.instance.get_transformation_class(), 'template_name',
|
||||
self.instance.get_control_code_class(), 'template_name',
|
||||
None
|
||||
)
|
||||
else:
|
||||
# Get the template name when the transformation is being created
|
||||
# Get the template name when the control_code is being created
|
||||
template_name = getattr(
|
||||
BaseTransformation.get(name=transformation_name),
|
||||
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'
|
||||
"""
|
||||
#if template_name:
|
||||
# self.fields['arguments'].widget.attrs['class'] = 'hidden'
|
||||
# self.fields['order'].widget.attrs['class'] = 'hidden'
|
||||
|
||||
def clean(self):
|
||||
try:
|
||||
@@ -117,4 +63,3 @@ class ControlSheetCodeForm(forms.ModelForm):
|
||||
'"%s" not a valid entry.'
|
||||
) % self.cleaned_data['arguments']
|
||||
)
|
||||
"""
|
||||
|
||||
@@ -12,3 +12,12 @@ 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_code_delete = Icon(
|
||||
driver_name='fontawesome', symbol='times'
|
||||
)
|
||||
icon_control_sheet_code_edit = Icon(
|
||||
driver_name='fontawesome', symbol='pencil-alt'
|
||||
)
|
||||
icon_control_sheet_code_list = Icon(
|
||||
driver_name='fontawesome', symbol='qrcode'
|
||||
)
|
||||
|
||||
@@ -38,3 +38,27 @@ link_control_sheet_preview = Link(
|
||||
text=_('Preview'), permissions=(permission_control_sheet_view,),
|
||||
view='control_codes:control_sheet_preview'
|
||||
)
|
||||
|
||||
link_control_sheet_code_delete = Link(
|
||||
icon_class_path='mayan.apps.control_codes.icons.icon_control_sheet_code_delete',
|
||||
kwargs={
|
||||
'control_sheet_id': 'control_sheet.pk',
|
||||
'control_sheet_code_id': 'resolved_object.pk'
|
||||
}, tags='dangerous', text=_('Delete'),
|
||||
permissions=(permission_control_sheet_delete,),
|
||||
view='control_codes:control_sheet_code_delete'
|
||||
)
|
||||
link_control_sheet_code_edit = Link(
|
||||
icon_class_path='mayan.apps.control_codes.icons.icon_control_sheet_code_edit',
|
||||
kwargs={
|
||||
'control_sheet_id': 'control_sheet.pk',
|
||||
'control_sheet_code_id': 'resolved_object.pk'
|
||||
}, text=_('Edit'), permissions=(permission_control_sheet_edit,),
|
||||
view='control_codes:control_sheet_code_edit'
|
||||
)
|
||||
link_control_sheet_code_list = Link(
|
||||
icon_class_path='mayan.apps.control_codes.icons.icon_control_sheet_code_list',
|
||||
kwargs={'control_sheet_id': 'resolved_object.pk'},
|
||||
text=_('Codes'), permissions=(permission_control_sheet_view,),
|
||||
view='control_codes:control_sheet_code_list'
|
||||
)
|
||||
|
||||
@@ -51,6 +51,7 @@ class ControlSheet(models.Model):
|
||||
verbose_name_plural = _('Control sheets')
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class ControlSheetCode(models.Model):
|
||||
control_sheet = models.ForeignKey(
|
||||
on_delete=models.CASCADE, related_name='codes', to=ControlSheet,
|
||||
@@ -58,7 +59,7 @@ class ControlSheetCode(models.Model):
|
||||
)
|
||||
order = models.PositiveIntegerField(
|
||||
blank=True, db_index=True, default=0, help_text=_(
|
||||
'Order in which the transformations will be executed. If left '
|
||||
'Order in which the control codes will be interpreted. If left '
|
||||
'unchanged, an automatic order value will be assigned.'
|
||||
), verbose_name=_('Order')
|
||||
)
|
||||
@@ -68,7 +69,7 @@ class ControlSheetCode(models.Model):
|
||||
)
|
||||
arguments = models.TextField(
|
||||
blank=True, help_text=_(
|
||||
'Enter the arguments for the control code as a YAML '
|
||||
'The arguments for the control code as a YAML '
|
||||
'dictionary.'
|
||||
), validators=[YAMLValidator()], verbose_name=_('Arguments')
|
||||
)
|
||||
@@ -79,6 +80,9 @@ class ControlSheetCode(models.Model):
|
||||
verbose_name = _('Control sheet code')
|
||||
verbose_name_plural = _('Control sheet codes')
|
||||
|
||||
def __str__(self):
|
||||
return force_text(self.get_label())
|
||||
|
||||
@cached_property
|
||||
def cache(self):
|
||||
Cache = apps.get_model(app_label='file_caching', model_name='Cache')
|
||||
@@ -152,6 +156,10 @@ class ControlSheetCode(models.Model):
|
||||
)
|
||||
).hexdigest()
|
||||
|
||||
def get_label(self):
|
||||
return force_text(self.get_control_code_class().label)
|
||||
get_label.short_description = _('Label')
|
||||
|
||||
def render(self):
|
||||
return self.get_control_code_instance().get_image(order=self.order)
|
||||
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
{% extends 'appearance/base_plain.html' %}
|
||||
|
||||
{% load documents_tags %}
|
||||
|
||||
{% block title %}{{ title }}{% endblock title %}
|
||||
|
||||
{% block content_plain %}
|
||||
@@ -11,20 +9,19 @@
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
.list-inline {
|
||||
padding-left: 0;
|
||||
list-style: none;
|
||||
margin-left: -5px;
|
||||
}
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.list-inline > li {
|
||||
display: inline-block;
|
||||
padding-right: 5px;
|
||||
padding-left: 5px;
|
||||
}
|
||||
.list-inline {
|
||||
padding-left: 0;
|
||||
list-style: none;
|
||||
margin-left: -5px;
|
||||
}
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
.list-inline > li {
|
||||
display: inline-block;
|
||||
padding-right: 5px;
|
||||
padding-left: 5px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<h1 class="text-center">{{ title }}</h1>
|
||||
@@ -32,7 +29,7 @@
|
||||
{% for code in object.codes.all %}
|
||||
<li class="list-inline-item">
|
||||
<img class="img-responsive" src="{{ code.get_api_image_url }}" />
|
||||
<p>{{ code.get_display }}</p>
|
||||
<p class="text-center">{{ code.get_label }}</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
@@ -9,7 +9,9 @@ from .api_views import (
|
||||
)
|
||||
from .views import (
|
||||
ControlSheetCreateView, ControlSheetDeleteView, ControlSheetEditView,
|
||||
ControlSheetListView, ControlSheetPreviewView
|
||||
ControlSheetListView, ControlSheetPreviewView,
|
||||
|
||||
ControlSheetCodeDeleteView, ControlSheetCodeEditView, ControlSheetCodeListView
|
||||
)
|
||||
|
||||
urlpatterns = [
|
||||
@@ -21,6 +23,18 @@ urlpatterns = [
|
||||
regex=r'^control_sheets/create/$',
|
||||
view=ControlSheetCreateView.as_view(), name='control_sheet_create'
|
||||
),
|
||||
url(
|
||||
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/(?P<control_sheet_code_id>\d+)/edit/$',
|
||||
view=ControlSheetCodeEditView.as_view(), name='control_sheet_code_edit'
|
||||
),
|
||||
url(
|
||||
regex=r'^control_sheets/(?P<control_sheet_id>\d+)/codes/(?P<control_sheet_code_id>\d+)/delete/$',
|
||||
view=ControlSheetCodeDeleteView.as_view(), name='control_sheet_code_delete'
|
||||
),
|
||||
url(
|
||||
regex=r'^control_sheets/(?P<control_sheet_id>\d+)/delete/$',
|
||||
view=ControlSheetDeleteView.as_view(), name='control_sheet_delete'
|
||||
|
||||
@@ -11,9 +11,9 @@ from mayan.apps.common.generics import (
|
||||
FormView, SimpleView, SingleObjectCreateView, SingleObjectDeleteView,
|
||||
SingleObjectDetailView, SingleObjectEditView, SingleObjectListView
|
||||
)
|
||||
from mayan.apps.common.mixins import ExternalContentTypeObjectMixin
|
||||
from mayan.apps.common.mixins import ExternalObjectMixin
|
||||
|
||||
from .forms import ControlCodeClassSelectionForm
|
||||
from .forms import ControlSheetCodeClassSelectionForm, ControlSheetCodeForm
|
||||
from .links import link_control_sheet_create
|
||||
from .models import ControlSheet
|
||||
from .permissions import (
|
||||
@@ -107,6 +107,64 @@ class ControlSheetPreviewView(SingleObjectDetailView):
|
||||
}
|
||||
|
||||
|
||||
class ControlSheetCodeDeleteView(ExternalObjectMixin, SingleObjectDeleteView):
|
||||
form_class = ControlSheetCodeForm
|
||||
external_object_class = ControlSheet
|
||||
external_object_permission = permission_control_sheet_delete
|
||||
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',),
|
||||
#'object': self.external_object,
|
||||
'title': _('Codes of control sheet: %s') % self.external_object,
|
||||
}
|
||||
|
||||
def get_source_queryset(self):
|
||||
return self.external_object.codes.all()
|
||||
|
||||
|
||||
|
||||
"""
|
||||
class TransformationCreateView(
|
||||
|
||||
Reference in New Issue
Block a user