remotes/origin/yandex
Bachurin Sergey 12 years ago
parent e30fe7e359
commit dc87bd93a4
  1. 6
      project/docs/forms/base_forms.py
  2. 3
      project/docs/urls.py
  3. 52
      project/docs/views/base_views.py
  4. 1
      project/static/css/style.css
  5. 28
      project/templates/docs/_base/preview.html

@ -36,8 +36,10 @@ class BaseModelForm(MyBaseModelForm):
# Настроить атрибуты виджетов
# TODO вынести в _MySuperForm (сделать там настройку полей с datepicker-ами из словаря)
f['doc_date'].widget.attrs['class'] = 'has-datepicker'
f['plat_doc_date'].widget.attrs['class'] = 'has-datepicker'
f['fix_doc_date'].widget.attrs['class'] = 'has-datepicker'
if f.get('plat_doc_date'):
f['plat_doc_date'].widget.attrs['class'] = 'has-datepicker'
if f.get('fix_doc_date'):
f['fix_doc_date'].widget.attrs['class'] = 'has-datepicker'
# Если в форме есть поле bank_account, настроить связь с BankAccount: чтобы можно было выбрать __только__
# расчетные счета данного пользователя. Также убрать пустой вариант из селекта.

@ -42,6 +42,9 @@ for name, klass in klasses:
# сохранить в pdf
url(r'^%s/(?P<id>\d+)/pdf/$' % name, getview, {'klass': klass, 'oper': 'as_pdf',},
name='docs_%s_pdf' % name),
# показать картинку
url(r'^%s/(?P<id>\d+)/preview/$' % name, getview, {'klass': klass, 'oper': 'as_img',},
name='docs_%s_img' % name),
# сохранить в excel
url(r'^%s/(?P<id>\d+)/xls/$' % name, getview, {'klass': klass, 'oper': 'as_xls',},
name='docs_%s_xls' % name),

@ -1,9 +1,14 @@
# -*- coding: utf-8 -*-
import os
import glob
from datetime import datetime
import tempfile
from email.header import Header
from time import time
import simplejson as json
import ghostscript
from django.shortcuts import render, get_object_or_404, redirect
from django.http import HttpResponseServerError, HttpResponseBadRequest, HttpResponse
from django.utils.decorators import method_decorator
@ -33,6 +38,8 @@ from project.customer.decorators import license_required
DEBUG = getattr(settings, 'DEBUG', False)
SUPPORT_EMAIL = getattr(settings, 'SUPPORT_EMAIL', '')
MEDIA_ROOT = getattr(settings, 'MEDIA_ROOT', '')
MEDIA_URL = getattr(settings, 'MEDIA_URL', '')
ORDER_VAR = 'o'
ORDER_TYPE_VAR = 'ot'
@ -76,6 +83,7 @@ class BaseViews(object):
TEMPLATE_EDIT = 'docs/_base/base_edit.html'
TEMPLATE_DELETE = 'docs/_base/base_delete.html'
TEMPLATE_FORM = 'docs/_base/base_form.html'
TEMPLATE_IMG = 'docs/_base/preview.html'
TEMPLATE_FORM_JS = 'docs/stub_js.html'
TEMPLATE_EMAIL = 'docs/email/base_email.html'
@ -368,6 +376,50 @@ class BaseViews(object):
print '%s generation time (seconds): %s' % (self.XLS_TEMPLATE, time()-c1,)
return xls
def as_img(self, *args, **kwargs):
"""Вывести превью документа."""
try:
pdf = self.get_pdf(*args, **kwargs)
_, filename = tempfile.mkstemp()
tmp_media_dir = os.path.join(MEDIA_ROOT, 'tmp')
if not os.path.exists(tmp_media_dir):
os.makedirs(tmp_media_dir)
tmp_dir = tempfile.mkdtemp(dir=tmp_media_dir)
tmp_dirname = os.path.split(tmp_dir)[1]
f = open(filename, 'w')
f.write(pdf)
f.close()
args = ["",
"-dNOPAUSE", "-dBATCH", "-dSAFER",
"-sDEVICE=png16m",
"-r150",
"-sOutputFile=%s" % os.path.join(tmp_dir, "page-%03d.png"),
"-f", filename
]
GS = ghostscript.Ghostscript(*args)
os.remove(filename)
filename = '%s.pdf' % self.get_filename(*args, **kwargs)
imgs = glob.glob(os.path.join(tmp_dir, '*.png'))
imgs = [os.path.split(i)[1] for i in imgs]
imgs = ['%stmp/%s/%s' % (MEDIA_URL, tmp_dirname, i) for i in imgs]
dictionary = {
'images': imgs,
'padeji': self.PADEJI,
'padeji_mnoj': self.PADEJI_MNOJ,
'url_prefix': self.URL_PREFIX,
}
return render(self.request, self.TEMPLATE_IMG, dictionary)
except:
if DEBUG:
raise
else:
return HttpResponseServerError('Server error. Try later.')
def as_pdf(self, *args, **kwargs):
"""Вывести документ в формате PDF в HttpResponse."""
try:

@ -214,3 +214,4 @@ div.blockMsg { width: 100%; height: 100%; top: 0; left: 0; text-align: center; }
.header {font-weight:bold; }
#menu ul li {display:inline;}
.preview {width:1000px;height:500px;overflow:scroll;}

@ -0,0 +1,28 @@
{% extends "base.html" %}
{% block title %}Просмотр {{ padeji.rodit }}{% endblock %}
{% block content %}
{% url url_prefix|add:'list' as url_list %}
{% url url_prefix|add:'delete' id=obj.pk as url_delete %}
<span class="nav" style="display:block; margin-bottom:3ex;">
<a class="back" href="{{ url_list }}">Вернуться к списку</a>
</span>
<h2 style="display:inline">Просмотр {{ padeji.rodit }}</h2>
<div class="preview">
{% for img in images %}
<img src='{{ img }}' alt='Страница {{ forloop.conter }}' />
{% endfor %}
</div>
<div class="clear"></div>
{% endblock %}
{% block dialogs %}
{% endblock %}
{% block js %}
{% endblock %}
Loading…
Cancel
Save