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:
Roberto Rosario
2019-09-03 16:15:08 -04:00
parent 8c6812203c
commit 1315a74e27
8 changed files with 172 additions and 94 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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