Implement bulk print

master
informatic 2020-04-14 18:18:07 +02:00
parent 967d2079dc
commit f91c854363
3 changed files with 15 additions and 10 deletions

View File

@ -163,14 +163,7 @@ class FaceshieldRequestAdmin(ModelView):
@flask_admin.expose('/label/html')
def label_html(self):
model = self.get_one(request.args.get('id'))
if model.faceshield_full_delivered % 150 == 0 and model.faceshield_full_delivered // 150 > 1:
label_count = model.faceshield_full_delivered // 150
else:
label_count = 1
return self.render('label.html', model=model, label_count=label_count)
return self.render('label.html', models=[model])
def bulk_status_change(self, ids, status):
try:
@ -212,6 +205,10 @@ class FaceshieldRequestAdmin(ModelView):
def action_pickuppending(self, ids):
self.bulk_status_change(ids, Status.pickuppending)
@flask_admin.actions.action('bulkprint', 'Print')
def action_bulkprint(self, ids):
models = self.get_query().filter(FaceshieldRequest.id.in_(ids)).all()
return render_pdf(HTML(string=self.render('label.html', models=models)))
class FilteredFaceshieldRequestAdmin(FaceshieldRequestAdmin):
def get_query(self):

View File

@ -70,6 +70,12 @@ class FaceshieldRequest(db.Model):
def __str__(self):
return '#{} {} ({})'.format(self.id, self.entity_info, self.status.name)
@property
def label_count(self):
if self.faceshield_full_delivered % 150 == 0 and self.faceshield_full_delivered // 150 > 1:
return self.faceshield_full_delivered // 150
return 1
class RequestChange(db.Model):
id = db.Column(db.Integer, primary_key=True)

View File

@ -64,11 +64,12 @@ html, body {
</style>
</head>
<body>
{% for label_id in range(label_count) %}
{% for model in models %}
{% for label_id in range(model.label_count) %}
<div class="container">
<div class="line idline">
<small>Warszawski Hackerspace / <u>https://covid.hackerspace.pl</u> / <b>{{ model.status.name }}</b></small>
{{ model.faceshield_full_delivered }} <b>#{{ model.id }}</b>{% if label_count > 1 %} <small class="labelid">({{ label_id + 1 }}/{{ label_count }})</small>{% endif %}
{{ model.faceshield_full_delivered }} <b>#{{ model.id }}</b>{% if model.label_count > 1 %} <small class="labelid">({{ label_id + 1 }}/{{ model.label_count }})</small>{% endif %}
</div>
<div class="line mark">
{{ model.entity_info }}<br />
@ -81,5 +82,6 @@ html, body {
</div>
</div>
{% endfor %}
{% endfor %}
</body>
</html>