Metadata-Version: 1.1
Name: btc-template-tables
Version: 0.4.2
Summary: Some classes for for describing tables with an auto-generated template.
Home-page: https://github.com/MEADez/btc-template-tables
Author: MEADez
Author-email: m3adez@gmail.com
License: BSD License
Description: ===================================================
        BTC Template Tables
        ===================================================
        
        Some classes for for describing tables with an auto-generated template.
        
        Detailed documentation is in the "docs" directory.
        
        Quick start
        -----------
        
        1. Add "template_tables" to your INSTALLED_APPS setting like this::
        
            INSTALLED_APPS = (
                  ...
                  'template_tables',
              )
        
        2. Create table class::
        
            class MyTable(BaseTemplateTable):
        
                css_classes = ['template-tables', 'mdl-data-table', 'mdl-js-data-table']
                empty_table_text = 'Нет данных'
        
                def get_header_rows(self) -> List[TableRowType]:
                    [TR([
                        TH(''),
                        MDLNonNumericTH('Уч.', ordering='section'),
                        MDLNonNumericTH('Документ', ordering='invoices__unique_num'),
                        MDLNonNumericTH('КПТП', ordering='process_map__unique_number'),
                        MDLNonNumericTH('Артикул ДСЕ', ordering='invoices__product__vendor_code'),
                        MDLNonNumericTH('Наименование', ordering='invoices__product__name'),
                        TH('Кол-во (шт.)', ordering='invoices__product__count'),
                        TH('Вес (кг)', ordering='invoices__product__weight'),
                        MDLNonNumericTH('Место', ordering='invoices__product__storage__name'),
                    ])]
        
                def get_body_row(self, index: int, data_item: Any) -> TableRowType:
                    invoice = data_item.get_invoice()
                    product = safety_get_attribute(invoice, 'product')
                    invoice_unique_number = f'{invoice.get_document_type_display()}-{invoice.unique_num}' if invoice else None
        
                    transition_btn = ARSimpleLink(
                        icon=ARMaterialIcon('chevron_right'),
                        css_classes=['table-transition-btn'],
                        html_params=dict(href=reverse('dispatcher:task_details:selected-products', kwargs=dict(pk=data_item.pk)))
                    )
        
                    return TR([
                        MDLNonNumericTD(transition_btn),
                        MDLNonNumericTD(data_item.section),
                        MDLNonNumericTD(invoice_unique_number),
                        MDLNonNumericTD(safety_get_attribute(data_item, 'process_map')),
                        MDLNonNumericTD(safety_get_attribute(product, 'vendor_code')),
                        MDLNonNumericTD(safety_get_attribute(product, 'name')),
                        TD(safety_get_attribute(product, 'count')),
                        TD(safety_get_attribute(product, 'weight')),
                        MDLNonNumericTD(safety_get_attribute(product, 'storage__name')),
                    ])
        
        3. Define view - `ListView` or `FilterView`::
        
            class MyTableView(TemplateTableViewMixin, FilterView):
        
                model = MyModel
                filterset_class = MyTableFilter
                table_class = MyTable
                template_name = 'tables/template_table_base.html'
        
                def get_queryset(self):
                    return super().get_queryset().get_pretty_qs()
        
            # For ordering and searching, the django-filter package is used.
            # Order filter:
        
            _base_task_table_searching_fields = [
                'section',
                'invoices__unique_num',
                'process_map__unique_number',
                'invoices__product__vendor_code',
                'invoices__product__name',
                'invoices__product__count',
                'invoices__product__weight',
                'invoices__product__storage__name'
            ]
        
            class MyTableFilter(FilterSet):
        
                ordering = OrderingFilter(
                    fields=tuple(
                        (field_name, field_name) for field_name in _base_task_table_searching_fields
                    )
                )
        
        4. In template::
        
            <!--
            tables/template_table_base.html
        
            That example uses btc-flex-forms for filters rendering
            -->
        
            <div>
                <div>{{ filter.form.as_flex }}</div>
                <div>{{ table.render }}</div>
                <div>{{ pagination.render }}</div>
            </div>
        
            <!-- Note: To transform table to ajax-table just you simple js-handler for link click events -->
        
        Example:
        
        .. image:: https://user-images.githubusercontent.com/33987296/74619321-2cd5ef80-5146-11ea-8e7b-28ddf929541d.png
Platform: UNKNOWN
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.7
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
