Save and edit next button appears on documents without viewer as well.

Made the new recent correspondents filter optional. Disabled by default.
This commit is contained in:
Jonas Winkler 2018-09-13 13:10:05 +02:00
parent 0dc3644cc1
commit 8d003a6a85
6 changed files with 111 additions and 95 deletions

View File

@ -94,9 +94,10 @@ class RecentCorrespondentFilter(admin.RelatedFieldListFilter):
def field_choices(self, field, request, model_admin): def field_choices(self, field, request, model_admin):
lookups = [] lookups = []
date_limit = datetime.now() - timedelta(days=365*settings.PAPERLESS_RECENT_CORRESPONDENT_YEARS) if settings.PAPERLESS_RECENT_CORRESPONDENT_YEARS and settings.PAPERLESS_RECENT_CORRESPONDENT_YEARS > 0:
for c in Correspondent.objects.filter(documents__created__gte = date_limit).distinct(): date_limit = datetime.now() - timedelta(days=365*settings.PAPERLESS_RECENT_CORRESPONDENT_YEARS)
lookups.append( (c.id, c.name) ) for c in Correspondent.objects.filter(documents__created__gte = date_limit).distinct():
lookups.append( (c.id, c.name) )
return lookups return lookups

View File

@ -4,7 +4,7 @@
{{ block.super }} {{ block.super }}
{% if file_type in "pdf jpg png" %} {% if file_type in "asd" %}
<div id="change_form_twocolumn_parent"> <div id="change_form_twocolumn_parent">
<div id="change_form_form_parent"></div> <div id="change_form_form_parent"></div>
@ -23,16 +23,17 @@
django.jQuery("#content-main").append(django.jQuery("#change_form_twocolumn_parent")); django.jQuery("#content-main").append(django.jQuery("#change_form_twocolumn_parent"));
</script> </script>
{% if next_object %} {% endif %}
<script type="text/javascript">//<![CDATA[
(function($){ {% if next_object %}
$('<input type="submit" value="Save and edit next" name="_saveandeditnext" />') <script type="text/javascript">//<![CDATA[
.prependTo('div.submit-row'); (function($){
$('<input type="hidden" value="{{next_object}}" name="_next_object" />') $('<input type="submit" value="Save and edit next" name="_saveandeditnext" />')
.prependTo('div.submit-row'); .prependTo('div.submit-row');
})(django.jQuery); $('<input type="hidden" value="{{next_object}}" name="_next_object" />')
//]]></script> .prependTo('div.submit-row');
{% endif %} })(django.jQuery);
//]]></script>
{% endif %} {% endif %}
{% endblock content %} {% endblock content %}
@ -46,4 +47,4 @@
django.jQuery(".field-created input").first().attr("type", "date") django.jQuery(".field-created input").first().attr("type", "date")
</script> </script>
{% endblock footer %} {% endblock footer %}

View File

@ -38,9 +38,9 @@
<input type="hidden" name="action" value="{{action}}"/> <input type="hidden" name="action" value="{{action}}"/>
<input type="hidden" name="post" value="yes"/> <input type="hidden" name="post" value="yes"/>
<p> <p>
<input type="submit" value="{% trans " Confirm" %}" /> <input type="submit" value="{% trans "Confirm" %}" />
<a href="#" class="button cancel-link">{% trans "Go back" %}</a> <a href="#" class="button cancel-link">{% trans "Go back" %}</a>
</p> </p>
</div> </div>
</form> </form>
{% endblock %} {% endblock %}

View File

@ -1,2 +1 @@
<img src="{{download_url}}" style="max-width: 100%"> <img src="{{download_url}}" style="max-width: 100%">

View File

@ -3,117 +3,128 @@
<div> <div>
<input id="prev" value="Previous" class="default" type="button"> <input id="prev" value="Previous" class="default" type="button">
<input id="next" value="Next" class="default" type="button"> <input id="next" value="Next" class="default" type="button">
&nbsp; &nbsp; &nbsp; &nbsp;
<span>Page: <span id="page_num"></span> / <span id="page_count"></span></span> <span>Page: <span id="page_num"></span> / <span id="page_count"></span></span>
&nbsp; &nbsp; &nbsp; &nbsp;
<input id="zoomin" value="+" class="default" type="button"> <input id="zoomin" value="+" class="default" type="button">
<input id="zoomout" value="-" class="default" type="button"> <input id="zoomout" value="-" class="default" type="button">
</div> </div>
<div style="width: 100%; overflow: auto;"> <div style="width: 100%; overflow: auto;">
<canvas id="the-canvas"></canvas> <canvas id="the-canvas"></canvas>
</div> </div>
<script type="text/javascript" src="{% static 'documents/js/pdf.js' %}"></script> <script type="text/javascript" src="{% static 'documents/js/pdf.js' %}"></script>
<script type="text/javascript" src="{% static 'documents/js/pdf.worker.js' %}"></script> <script type="text/javascript" src="{% static 'documents/js/pdf.worker.js' %}"></script>
{# Load and display PDF document#}
<script> {# Load and display PDF document#}
<script>
var pdfjsLib = window['pdfjs-dist/build/pdf']; var pdfjsLib = window['pdfjs-dist/build/pdf'];
var pdfDoc = null, var pdfDoc = null,
pageNum = 1, pageNum = 1,
pageRendering = false, pageRendering = false,
pageNumPending = null, pageNumPending = null,
scale = 1.0, scale = 1.0,
canvas = document.getElementById('the-canvas'), canvas = document.getElementById('the-canvas'),
ctx = canvas.getContext('2d'); ctx = canvas.getContext('2d');
/** /**
* Get page info from document, resize canvas accordingly, and render page. * Get page info from document, resize canvas accordingly, and render page.
* @param num Page number. * @param num Page number.
*/ */
function renderPage(num) { function renderPage(num) {
pageRendering = true; pageRendering = true;
// Using promise to fetch the page // Using promise to fetch the page
pdfDoc.getPage(num).then(function(page) { pdfDoc.getPage(num).then(function(page) {
var viewport = page.getViewport(scale); var viewport = page.getViewport(scale);
canvas.height = viewport.height; canvas.height = viewport.height;
canvas.width = viewport.width; canvas.width = viewport.width;
// Render PDF page into canvas context // Render PDF page into canvas context
var renderContext = { var renderContext = {
canvasContext: ctx, canvasContext: ctx,
viewport: viewport viewport: viewport
}; };
var renderTask = page.render(renderContext); var renderTask = page.render(renderContext);
// Wait for rendering to finish // Wait for rendering to finish
renderTask.promise.then(function () { renderTask.promise.then(function () {
pageRendering = false; pageRendering = false;
if (pageNumPending !== null) { if (pageNumPending !== null) {
// New page rendering is pending // New page rendering is pending
renderPage(pageNumPending); renderPage(pageNumPending);
pageNumPending = null; pageNumPending = null;
} }
}); });
}); });
// Update page counters // Update page counters
document.getElementById('page_num').textContent = num; document.getElementById('page_num').textContent = num;
} }
/**
* If another page rendering in progress, waits until the rendering is /**
* finised. Otherwise, executes rendering immediately. * If another page rendering in progress, waits until the rendering is
*/ * finised. Otherwise, executes rendering immediately.
function queueRenderPage(num) { */
function queueRenderPage(num) {
if (pageRendering) { if (pageRendering) {
pageNumPending = num; pageNumPending = num;
} else { } else {
renderPage(num); renderPage(num);
} }
} }
/**
* Displays previous page. /**
*/ * Displays previous page.
function onPrevPage() { */
function onPrevPage() {
if (pageNum <= 1) { if (pageNum <= 1) {
return; return;
} }
pageNum--; pageNum--;
queueRenderPage(pageNum); queueRenderPage(pageNum);
} }
document.getElementById('prev').addEventListener('click', onPrevPage);
/** document.getElementById('prev').addEventListener('click', onPrevPage);
* Displays next page.
*/ /**
function onNextPage() { * Displays next page.
*/
function onNextPage() {
if (pageNum >= pdfDoc.numPages) { if (pageNum >= pdfDoc.numPages) {
return; return;
} }
pageNum++; pageNum++;
queueRenderPage(pageNum); queueRenderPage(pageNum);
} }
document.getElementById('next').addEventListener('click', onNextPage);
/** document.getElementById('next').addEventListener('click', onNextPage);
* Displays next page.
*/ /**
function onZoomIn() { * Displays next page.
*/
function onZoomIn() {
scale *= 1.2; scale *= 1.2;
queueRenderPage(pageNum); queueRenderPage(pageNum);
} }
document.getElementById('zoomin').addEventListener('click', onZoomIn);
/** document.getElementById('zoomin').addEventListener('click', onZoomIn);
* Displays next page.
*/ /**
function onZoomOut() { * Displays next page.
*/
function onZoomOut() {
scale /= 1.2; scale /= 1.2;
queueRenderPage(pageNum); queueRenderPage(pageNum);
} }
document.getElementById('zoomout').addEventListener('click', onZoomOut);
/** document.getElementById('zoomout').addEventListener('click', onZoomOut);
* Asynchronously downloads PDF.
*/ /**
pdfjsLib.getDocument("{{download_url}}").then(function (pdfDoc_) { * Asynchronously downloads PDF.
*/
pdfjsLib.getDocument("{{download_url}}").then(function (pdfDoc_) {
pdfDoc = pdfDoc_; pdfDoc = pdfDoc_;
document.getElementById('page_count').textContent = pdfDoc.numPages; document.getElementById('page_count').textContent = pdfDoc.numPages;
// Initial/first page rendering // Initial/first page rendering
renderPage(pageNum); renderPage(pageNum);
}); });
</script> </script>

View File

@ -298,4 +298,8 @@ FY_END = os.getenv("PAPERLESS_FINANCIAL_YEAR_END")
# Specify the default date order (for autodetected dates) # Specify the default date order (for autodetected dates)
DATE_ORDER = os.getenv("PAPERLESS_DATE_ORDER", "DMY") DATE_ORDER = os.getenv("PAPERLESS_DATE_ORDER", "DMY")
PAPERLESS_RECENT_CORRESPONDENT_YEARS = int(os.getenv("PAPERLESS_RECENT_CORRESPONDENT_YEARS", 1)) # Specify for how many years a correspondent is considered recent. Recent
# correspondents will be shown in a separate "Recent correspondents" filter as
# well. Set to 0 to disable this filter.
PAPERLESS_RECENT_CORRESPONDENT_YEARS = int(os.getenv(
"PAPERLESS_RECENT_CORRESPONDENT_YEARS", 0))