# QR code
* refactors qr code generating into class * refactors usage of former qr code method calls
This commit is contained in:
parent
e4c459f92e
commit
a2bda8d230
@ -14,7 +14,7 @@ from compensation.models import Compensation
|
|||||||
from konova.contexts import BaseContext
|
from konova.contexts import BaseContext
|
||||||
from konova.forms import SimpleGeomForm
|
from konova.forms import SimpleGeomForm
|
||||||
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
|
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
|
||||||
from konova.utils.generators import generate_qr_code
|
from konova.utils.qrcode import QrCode
|
||||||
from konova.views.report import AbstractPublicReportView
|
from konova.views.report import AbstractPublicReportView
|
||||||
|
|
||||||
|
|
||||||
@ -48,10 +48,14 @@ class CompensationPublicReportView(AbstractPublicReportView):
|
|||||||
)
|
)
|
||||||
parcels = comp.get_underlying_parcels()
|
parcels = comp.get_underlying_parcels()
|
||||||
|
|
||||||
qrcode_url = request.build_absolute_uri(reverse("compensation:report", args=(id,)))
|
qrcode = QrCode(
|
||||||
qrcode_img = generate_qr_code(qrcode_url, 10)
|
content=request.build_absolute_uri(reverse("compensation:report", args=(id,))),
|
||||||
qrcode_lanis_url = comp.get_LANIS_link()
|
size=10
|
||||||
qrcode_img_lanis = generate_qr_code(qrcode_lanis_url, 7)
|
)
|
||||||
|
qrcode_lanis = QrCode(
|
||||||
|
content=comp.get_LANIS_link(),
|
||||||
|
size=7
|
||||||
|
)
|
||||||
|
|
||||||
# Order states by surface
|
# Order states by surface
|
||||||
before_states = comp.before_states.all().order_by("-surface").prefetch_related("biotope_type")
|
before_states = comp.before_states.all().order_by("-surface").prefetch_related("biotope_type")
|
||||||
@ -61,12 +65,12 @@ class CompensationPublicReportView(AbstractPublicReportView):
|
|||||||
context = {
|
context = {
|
||||||
"obj": comp,
|
"obj": comp,
|
||||||
"qrcode": {
|
"qrcode": {
|
||||||
"img": qrcode_img,
|
"img": qrcode.get_img(),
|
||||||
"url": qrcode_url,
|
"url": qrcode.get_content(),
|
||||||
},
|
},
|
||||||
"qrcode_lanis": {
|
"qrcode_lanis": {
|
||||||
"img": qrcode_img_lanis,
|
"img": qrcode_lanis.get_img(),
|
||||||
"url": qrcode_lanis_url,
|
"url": qrcode_lanis.get_content(),
|
||||||
},
|
},
|
||||||
"is_entry_shared": False, # disables action buttons during rendering
|
"is_entry_shared": False, # disables action buttons during rendering
|
||||||
"before_states": before_states,
|
"before_states": before_states,
|
||||||
|
|||||||
@ -14,7 +14,7 @@ from compensation.models import EcoAccount
|
|||||||
from konova.contexts import BaseContext
|
from konova.contexts import BaseContext
|
||||||
from konova.forms import SimpleGeomForm
|
from konova.forms import SimpleGeomForm
|
||||||
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
|
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
|
||||||
from konova.utils.generators import generate_qr_code
|
from konova.utils.qrcode import QrCode
|
||||||
from konova.views.report import AbstractPublicReportView
|
from konova.views.report import AbstractPublicReportView
|
||||||
|
|
||||||
|
|
||||||
@ -48,10 +48,14 @@ class EcoAccountPublicReportView(AbstractPublicReportView):
|
|||||||
)
|
)
|
||||||
parcels = acc.get_underlying_parcels()
|
parcels = acc.get_underlying_parcels()
|
||||||
|
|
||||||
qrcode_url = request.build_absolute_uri(reverse("compensation:acc:report", args=(id,)))
|
qrcode = QrCode(
|
||||||
qrcode_img = generate_qr_code(qrcode_url, 10)
|
content=request.build_absolute_uri(reverse("compensation:acc:report", args=(id,))),
|
||||||
qrcode_lanis_url = acc.get_LANIS_link()
|
size=10
|
||||||
qrcode_img_lanis = generate_qr_code(qrcode_lanis_url, 7)
|
)
|
||||||
|
qrcode_lanis = QrCode(
|
||||||
|
content=acc.get_LANIS_link(),
|
||||||
|
size=7
|
||||||
|
)
|
||||||
|
|
||||||
# Order states by surface
|
# Order states by surface
|
||||||
before_states = acc.before_states.all().order_by("-surface").select_related("biotope_type__parent")
|
before_states = acc.before_states.all().order_by("-surface").select_related("biotope_type__parent")
|
||||||
@ -67,12 +71,12 @@ class EcoAccountPublicReportView(AbstractPublicReportView):
|
|||||||
context = {
|
context = {
|
||||||
"obj": acc,
|
"obj": acc,
|
||||||
"qrcode": {
|
"qrcode": {
|
||||||
"img": qrcode_img,
|
"img": qrcode.get_img(),
|
||||||
"url": qrcode_url,
|
"url": qrcode.get_content(),
|
||||||
},
|
},
|
||||||
"qrcode_lanis": {
|
"qrcode_lanis": {
|
||||||
"img": qrcode_img_lanis,
|
"img": qrcode_lanis.get_img(),
|
||||||
"url": qrcode_lanis_url,
|
"url": qrcode_lanis.get_content(),
|
||||||
},
|
},
|
||||||
"is_entry_shared": False, # disables action buttons during rendering
|
"is_entry_shared": False, # disables action buttons during rendering
|
||||||
"before_states": before_states,
|
"before_states": before_states,
|
||||||
|
|||||||
@ -14,7 +14,7 @@ from ema.models import Ema
|
|||||||
from konova.contexts import BaseContext
|
from konova.contexts import BaseContext
|
||||||
from konova.forms import SimpleGeomForm
|
from konova.forms import SimpleGeomForm
|
||||||
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
|
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
|
||||||
from konova.utils.generators import generate_qr_code
|
from konova.utils.qrcode import QrCode
|
||||||
from konova.views.report import AbstractPublicReportView
|
from konova.views.report import AbstractPublicReportView
|
||||||
|
|
||||||
|
|
||||||
@ -48,10 +48,14 @@ class EmaPublicReportView(AbstractPublicReportView):
|
|||||||
)
|
)
|
||||||
parcels = ema.get_underlying_parcels()
|
parcels = ema.get_underlying_parcels()
|
||||||
|
|
||||||
qrcode_url = request.build_absolute_uri(reverse("ema:report", args=(id,)))
|
qrcode = QrCode(
|
||||||
qrcode_img = generate_qr_code(qrcode_url, 10)
|
content=request.build_absolute_uri(reverse("ema:report", args=(id,))),
|
||||||
qrcode_lanis_url = ema.get_LANIS_link()
|
size=10
|
||||||
qrcode_img_lanis = generate_qr_code(qrcode_lanis_url, 7)
|
)
|
||||||
|
qrcode_lanis = QrCode(
|
||||||
|
content=ema.get_LANIS_link(),
|
||||||
|
size=7
|
||||||
|
)
|
||||||
|
|
||||||
# Order states by surface
|
# Order states by surface
|
||||||
before_states = ema.before_states.all().order_by("-surface").prefetch_related("biotope_type")
|
before_states = ema.before_states.all().order_by("-surface").prefetch_related("biotope_type")
|
||||||
@ -61,12 +65,12 @@ class EmaPublicReportView(AbstractPublicReportView):
|
|||||||
context = {
|
context = {
|
||||||
"obj": ema,
|
"obj": ema,
|
||||||
"qrcode": {
|
"qrcode": {
|
||||||
"img": qrcode_img,
|
"img": qrcode.get_img(),
|
||||||
"url": qrcode_url
|
"url": qrcode.get_content(),
|
||||||
},
|
},
|
||||||
"qrcode_lanis": {
|
"qrcode_lanis": {
|
||||||
"img": qrcode_img_lanis,
|
"img": qrcode_lanis.get_img(),
|
||||||
"url": qrcode_lanis_url
|
"url": qrcode_lanis.get_content(),
|
||||||
},
|
},
|
||||||
"is_entry_shared": False, # disables action buttons during rendering
|
"is_entry_shared": False, # disables action buttons during rendering
|
||||||
"before_states": before_states,
|
"before_states": before_states,
|
||||||
|
|||||||
@ -14,7 +14,7 @@ from intervention.models import Intervention
|
|||||||
from konova.contexts import BaseContext
|
from konova.contexts import BaseContext
|
||||||
from konova.forms import SimpleGeomForm
|
from konova.forms import SimpleGeomForm
|
||||||
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
|
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
|
||||||
from konova.utils.generators import generate_qr_code
|
from konova.utils.qrcode import QrCode
|
||||||
from konova.views.report import AbstractPublicReportView
|
from konova.views.report import AbstractPublicReportView
|
||||||
|
|
||||||
|
|
||||||
@ -52,21 +52,26 @@ class InterventionPublicReportView(AbstractPublicReportView):
|
|||||||
distinct_deductions = intervention.deductions.all().distinct(
|
distinct_deductions = intervention.deductions.all().distinct(
|
||||||
"account"
|
"account"
|
||||||
)
|
)
|
||||||
qrcode_url = request.build_absolute_uri(reverse("intervention:report", args=(id,)))
|
|
||||||
qrcode_img = generate_qr_code(qrcode_url, 10)
|
qrcode = QrCode(
|
||||||
qrcode_lanis_url = intervention.get_LANIS_link()
|
content=request.build_absolute_uri(reverse("intervention:report", args=(id,))),
|
||||||
qrcode_img_lanis = generate_qr_code(qrcode_lanis_url, 7)
|
size=10
|
||||||
|
)
|
||||||
|
qrcode_lanis = QrCode(
|
||||||
|
content=intervention.get_LANIS_link(),
|
||||||
|
size=7
|
||||||
|
)
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
"obj": intervention,
|
"obj": intervention,
|
||||||
"deductions": distinct_deductions,
|
"deductions": distinct_deductions,
|
||||||
"qrcode": {
|
"qrcode": {
|
||||||
"img": qrcode_img,
|
"img": qrcode.get_img(),
|
||||||
"url": qrcode_url,
|
"url": qrcode.get_content(),
|
||||||
},
|
},
|
||||||
"qrcode_lanis": {
|
"qrcode_lanis": {
|
||||||
"img": qrcode_img_lanis,
|
"img": qrcode_lanis.get_img(),
|
||||||
"url": qrcode_lanis_url,
|
"url": qrcode_lanis.get_content(),
|
||||||
},
|
},
|
||||||
"geom_form": geom_form,
|
"geom_form": geom_form,
|
||||||
"parcels": parcels,
|
"parcels": parcels,
|
||||||
|
|||||||
@ -42,28 +42,6 @@ def generate_random_string(length: int, use_numbers: bool = False, use_letters_l
|
|||||||
ret_val = "".join(random.choice(elements) for i in range(length))
|
ret_val = "".join(random.choice(elements) for i in range(length))
|
||||||
return ret_val
|
return ret_val
|
||||||
|
|
||||||
|
|
||||||
def generate_qr_code(content: str, size: int = 20) -> str:
|
|
||||||
""" Generates a qr code from given content
|
|
||||||
|
|
||||||
Args:
|
|
||||||
content (str): The content for the qr code
|
|
||||||
size (int): The image size
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
qrcode_svg (str): The qr code as svg
|
|
||||||
"""
|
|
||||||
qrcode_factory = qrcode.image.svg.SvgImage
|
|
||||||
qrcode_img = qrcode.make(
|
|
||||||
content,
|
|
||||||
image_factory=qrcode_factory,
|
|
||||||
box_size=size
|
|
||||||
)
|
|
||||||
stream = BytesIO()
|
|
||||||
qrcode_img.save(stream)
|
|
||||||
return stream.getvalue().decode()
|
|
||||||
|
|
||||||
|
|
||||||
class IdentifierGenerator:
|
class IdentifierGenerator:
|
||||||
_MODEL = None
|
_MODEL = None
|
||||||
|
|
||||||
|
|||||||
47
konova/utils/qrcode.py
Normal file
47
konova/utils/qrcode.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
"""
|
||||||
|
Author: Michel Peltriaux
|
||||||
|
Created on: 14.12.25
|
||||||
|
|
||||||
|
"""
|
||||||
|
from io import BytesIO
|
||||||
|
|
||||||
|
import qrcode
|
||||||
|
import qrcode.image.svg as svg
|
||||||
|
|
||||||
|
|
||||||
|
class QrCode:
|
||||||
|
""" A wrapping class for creating a qr code with content
|
||||||
|
|
||||||
|
"""
|
||||||
|
_content = None
|
||||||
|
_img = None
|
||||||
|
|
||||||
|
def __init__(self, content: str, size: int):
|
||||||
|
self._content = content
|
||||||
|
self._img = self._generate_qr_code(content, size)
|
||||||
|
|
||||||
|
def _generate_qr_code(self, content: str, size: int = 20) -> str:
|
||||||
|
""" Generates a qr code from given content
|
||||||
|
|
||||||
|
Args:
|
||||||
|
content (str): The content for the qr code
|
||||||
|
size (int): The image size
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
qrcode_svg (str): The qr code as svg
|
||||||
|
"""
|
||||||
|
img_factory = svg.SvgImage
|
||||||
|
qrcode_img = qrcode.make(
|
||||||
|
content,
|
||||||
|
image_factory=img_factory,
|
||||||
|
box_size=size
|
||||||
|
)
|
||||||
|
stream = BytesIO()
|
||||||
|
qrcode_img.save(stream)
|
||||||
|
return stream.getvalue().decode()
|
||||||
|
|
||||||
|
def get_img(self):
|
||||||
|
return self._img
|
||||||
|
|
||||||
|
def get_content(self):
|
||||||
|
return self._content
|
||||||
Loading…
x
Reference in New Issue
Block a user