diff --git a/mayan/apps/documents/forms.py b/mayan/apps/documents/forms.py index 57a95478e5..6740c3472c 100644 --- a/mayan/apps/documents/forms.py +++ b/mayan/apps/documents/forms.py @@ -13,7 +13,7 @@ from common.forms import DetailForm, ModelForm from .models import ( Document, DocumentType, DocumentPage, DocumentTypeFilename ) -from .literals import DEFAULT_ZIP_FILENAME, PAGE_RANGE_CHOICES +from .literals import DEFAULT_ZIP_FILENAME, PAGE_RANGE_ALL, PAGE_RANGE_CHOICES from .permissions import permission_document_create from .widgets import DocumentPagesCarouselWidget, DocumentPageImageWidget @@ -207,8 +207,9 @@ class DocumentDownloadForm(forms.Form): self.fields['compressed'].widget.attrs.update({'disabled': True}) -class PrintForm(forms.Form): +class DocumentPrintForm(forms.Form): page_group = forms.ChoiceField( - widget=forms.RadioSelect, choices=PAGE_RANGE_CHOICES + choices=PAGE_RANGE_CHOICES, initial=PAGE_RANGE_ALL, + widget=forms.RadioSelect ) page_range = forms.CharField(label=_('Page range'), required=False) diff --git a/mayan/apps/documents/templates/documents/document_print.html b/mayan/apps/documents/templates/documents/document_print.html index 46360f3ec9..696abb1d21 100644 --- a/mayan/apps/documents/templates/documents/document_print.html +++ b/mayan/apps/documents/templates/documents/document_print.html @@ -4,9 +4,6 @@ {% block content_plain %} {% for page in pages %} - + {% endfor %} {% endblock %} - - -setting_print_size.value diff --git a/mayan/apps/documents/urls.py b/mayan/apps/documents/urls.py index 310191e218..f4955df250 100644 --- a/mayan/apps/documents/urls.py +++ b/mayan/apps/documents/urls.py @@ -19,11 +19,12 @@ from .views import ( DocumentListView, DocumentPageListView, DocumentPageRotateLeftView, DocumentPageRotateRightView, DocumentPageView, DocumentPageViewResetView, DocumentPageZoomInView, DocumentPageZoomOutView, DocumentPreviewView, - DocumentRestoreView, DocumentRestoreManyView, DocumentTrashView, - DocumentTrashManyView, DocumentTypeCreateView, DocumentTypeDeleteView, - DocumentTypeDocumentListView, DocumentTypeFilenameCreateView, - DocumentTypeFilenameDeleteView, DocumentTypeFilenameEditView, - DocumentTypeFilenameListView, DocumentTypeListView, DocumentTypeEditView, + DocumentPrint, DocumentRestoreView, DocumentRestoreManyView, + DocumentTrashView, DocumentTrashManyView, DocumentTypeCreateView, + DocumentTypeDeleteView, DocumentTypeDocumentListView, + DocumentTypeFilenameCreateView, DocumentTypeFilenameDeleteView, + DocumentTypeFilenameEditView, DocumentTypeFilenameListView, + DocumentTypeListView, DocumentTypeEditView, DocumentVersionDownloadFormView, DocumentVersionDownloadView, DocumentVersionListView, DocumentVersionRevertView, DocumentView, EmptyTrashCanView, RecentDocumentListView, document_clear_transformations, @@ -31,7 +32,7 @@ from .views import ( document_multiple_document_type_edit, document_multiple_update_page_count, document_page_navigation_first, document_page_navigation_last, document_page_navigation_next, document_page_navigation_previous, - document_print, document_update_page_count + document_update_page_count ) @@ -92,7 +93,7 @@ urlpatterns = patterns( name='document_edit' ), url( - r'^(?P\d+)/print/$', document_print, + r'^(?P\d+)/print/$', DocumentPrint.as_view(), name='document_print' ), url( diff --git a/mayan/apps/documents/views.py b/mayan/apps/documents/views.py index 07c92ced58..b64c008c04 100644 --- a/mayan/apps/documents/views.py +++ b/mayan/apps/documents/views.py @@ -29,8 +29,8 @@ from converter.permissions import permission_transformation_delete from .events import event_document_download, event_document_view from .forms import ( DocumentDownloadForm, DocumentForm, DocumentPageForm, DocumentPreviewForm, - DocumentPropertiesForm, DocumentTypeSelectForm, - DocumentTypeFilenameForm_create, PrintForm + DocumentPrintForm, DocumentPropertiesForm, DocumentTypeSelectForm, + DocumentTypeFilenameForm_create ) from .literals import PAGE_RANGE_RANGE, DEFAULT_ZIP_FILENAME from .models import ( @@ -1141,46 +1141,61 @@ class DocumentPageRotateRightView(DocumentPageInteractiveTransformation): ) % 360 -def document_print(request, document_id): - document = get_object_or_404(Document, pk=document_id) +class DocumentPrint(FormView): + form_class = DocumentPrintForm - AccessControlList.objects.check_access( - permissions=permission_document_print, user=request.user, obj=document - ) + def form_valid(self, form): + instance = self.get_object() - document.add_as_recent_document_for_user(request.user) + if form.cleaned_data['page_group'] == PAGE_RANGE_RANGE: + page_range = form.cleaned_data['page_range'] - post_redirect = None - next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', post_redirect or document.get_absolute_url()))) - - if request.method == 'POST': - form = PrintForm(request.POST) - if form.is_valid(): - if form.cleaned_data['page_group'] == PAGE_RANGE_RANGE: - page_range = form.cleaned_data['page_range'] - - if page_range: - page_range = parse_range(page_range) - pages = document.pages.filter(page_number__in=page_range) - else: - pages = document.pages.all() + if page_range: + page_range = parse_range(page_range) + pages = instance.pages.filter(page_number__in=page_range) else: - pages = document.pages.all() + pages = instance.pages.all() + else: + pages = instance.pages.all() - return render_to_response('documents/document_print.html', { + context = self.get_context_data() + + context.update( + { 'appearance_type': 'plain', - 'object': document, 'pages': pages, 'size': setting_print_size.value, - 'title': _('Print: %s') % document, - }, context_instance=RequestContext(request)) - else: - form = PrintForm() + } + ) - return render_to_response('appearance/generic_form.html', { - 'form': form, - 'object': document, - 'next': next, - 'title': _('Print: %s') % document, - 'submit_label': _('Submit'), - }, context_instance=RequestContext(request)) + return self.render_to_response(context=context) + + def get_extra_context(self): + instance = self.get_object() + + context = { + 'object': instance, + 'submit_method': 'POST', + 'submit_label': _('Submit'), + 'title': _('Print: %s') % instance, + } + + return context + + def get_object(self): + instance = get_object_or_404(Document, pk=self.kwargs['pk']) + + AccessControlList.objects.check_access( + permissions=permission_document_print, user=self.request.user, + obj=instance + ) + + instance.add_as_recent_document_for_user(self.request.user) + + return instance + + def get_template_names(self): + if self.request.method == 'POST': + return ['documents/document_print.html'] + else: + return [self.template_name]