""" Author: Michel Peltriaux Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany Contact: michel.peltriaux@sgdnord.rlp.de Created on: 25.11.20 """ import uuid from django import forms from django.core.paginator import PageNotAnInteger, EmptyPage from django.http import HttpRequest from django.utils.html import format_html import django_tables2 as tables from konova.forms import BaseForm from konova.settings import PAGE_SIZE_DEFAULT, PAGE_PARAM, RESULTS_PER_PAGE_PARAM, PAGE_SIZE_OPTIONS class BaseTable(tables.tables.Table): results_per_page_choices = PAGE_SIZE_OPTIONS results_per_page_chosen = None results_per_page_parameter = RESULTS_PER_PAGE_PARAM add_new_entries = True add_new_url = None title = None def __init__(self, request: HttpRequest = None, filter_set=None, queryset=None, *args, **kwargs): self.user = request.user or None if filter_set is not None: queryset = filter_set.qs kwargs["data"] = queryset kwargs["request"] = request super().__init__(*args, **kwargs) self.results_per_page_chosen = int(request.GET.get(RESULTS_PER_PAGE_PARAM, PAGE_SIZE_DEFAULT)) try: self.paginate( page=request.GET.get(PAGE_PARAM, 1), per_page=self.results_per_page_chosen, ) except (PageNotAnInteger, EmptyPage) as e: self.paginate( page=1, per_page=self.results_per_page_chosen, ) def render_link(self, tooltip: str, href: str, txt: str, new_tab: bool = False): """ Returns an html element using given parameters """ new_tab = "_blank" if new_tab else "_self" return format_html( "{}", href, new_tab, tooltip, txt, ) def render_delete_btn(self, tooltip: str = None, href: str = None): """ Returns a remover icon with support as html element using given parameters """ return format_html( "", href, tooltip, ) def render_edit_btn(self, tooltip: str = None, href: str = None): """ Returns a remover icon with support as html element using given parameters """ return format_html( "", href, tooltip, ) def render_open_btn(self, tooltip: str = None, href: str = None, new_tab: bool = False): """ Returns a remover icon with support as html element using given parameters """ return format_html( "", href, tooltip, "_blank" if new_tab else "" ) def render_boolean(self, tooltip: str = None, val: bool = False): """ Returns a remover icon with support as html element using given parameters """ icon = "fas fa-check-circle true" if val else "fas fa-times-circle false" return format_html( "", tooltip, icon ) class ChoicesColumnForm(BaseForm): select = forms.ChoiceField( choices=[], label="", label_suffix="", widget=forms.Select( attrs={ "onchange": "submit();", } ) ) def __init__(self, *args, **kwargs): self.action_url = kwargs.pop("action_url", None) self.choices = kwargs.pop("choices", []) super().__init__(*args, **kwargs) self.auto_id += "_" + str(uuid.uuid4()) if len(self.choices) > 0: self.fields["select"].choices = self.choices