231 lines
5.9 KiB
JavaScript
231 lines
5.9 KiB
JavaScript
import CheckboxFilter from '../filters/CheckboxFilter';
|
|
import IbanSelectionFilter from '../filters/IbanSelectionFilter';
|
|
import TextHeaderWithFilter from '../headers/TextHeaderWithFilter';
|
|
import SelectionHeader from '../headers/SelectionHeader';
|
|
import AmountRenderer from '../cellRenderers/AmountRenderer';
|
|
import TypeRenderer from '../cellRenderers/TypeRenderer';
|
|
import JtlRenderer from '../cellRenderers/JtlRenderer';
|
|
import DescriptionRenderer from '../cellRenderers/DescriptionRenderer';
|
|
import RecipientRenderer from '../cellRenderers/RecipientRenderer';
|
|
import DocumentRenderer from '../cellRenderers/DocumentRenderer';
|
|
import SelectionRenderer from '../cellRenderers/SelectionRenderer';
|
|
|
|
const formatDate = (dateString) => {
|
|
if (!dateString) return '';
|
|
const parts = dateString.split('.');
|
|
if (parts.length === 3) {
|
|
return `${parts[0]}.${parts[1]}.20${parts[2]}`;
|
|
}
|
|
return dateString;
|
|
};
|
|
|
|
export const getColumnDefs = () => [
|
|
{
|
|
headerName: '',
|
|
field: 'selection',
|
|
width: 50,
|
|
pinned: 'left',
|
|
sortable: false,
|
|
filter: false,
|
|
resizable: false,
|
|
suppressMenu: true,
|
|
cellRenderer: SelectionRenderer,
|
|
headerComponent: SelectionHeader,
|
|
headerComponentParams: {
|
|
// These will be set by the parent component
|
|
}
|
|
},
|
|
{
|
|
headerName: 'Datum',
|
|
field: 'Buchungstag',
|
|
width: 100,
|
|
valueFormatter: (params) => formatDate(params.value),
|
|
pinned: 'left',
|
|
sortable: true,
|
|
filter: 'agDateColumnFilter',
|
|
floatingFilter: false,
|
|
headerComponent: TextHeaderWithFilter
|
|
},
|
|
{
|
|
headerName: 'Beschreibung',
|
|
field: 'description',
|
|
width: 350,
|
|
sortable: true,
|
|
headerComponent: TextHeaderWithFilter,
|
|
tooltipField: 'description',
|
|
cellRenderer: DescriptionRenderer
|
|
},
|
|
{
|
|
headerName: 'Name',
|
|
field: 'Beguenstigter/Zahlungspflichtiger',
|
|
width: 200,
|
|
sortable: true,
|
|
headerComponent: TextHeaderWithFilter,
|
|
tooltipField: 'Beguenstigter/Zahlungspflichtiger',
|
|
cellRenderer: RecipientRenderer
|
|
},
|
|
{
|
|
headerName: 'IBAN',
|
|
field: 'Kontonummer/IBAN',
|
|
width: 180,
|
|
sortable: true,
|
|
filter: IbanSelectionFilter,
|
|
headerComponent: TextHeaderWithFilter,
|
|
tooltipField: 'Kontonummer/IBAN',
|
|
cellRenderer: RecipientRenderer
|
|
},
|
|
{
|
|
headerName: 'BIC',
|
|
field: 'BIC (SWIFT-Code)',
|
|
width: 120,
|
|
sortable: true,
|
|
headerComponent: TextHeaderWithFilter,
|
|
tooltipField: 'BIC',
|
|
cellRenderer: RecipientRenderer
|
|
},
|
|
{
|
|
headerName: 'Betrag',
|
|
field: 'numericAmount',
|
|
width: 120,
|
|
cellRenderer: AmountRenderer,
|
|
sortable: true,
|
|
filter: 'agNumberColumnFilter',
|
|
floatingFilter: false,
|
|
type: 'rightAligned',
|
|
headerComponent: TextHeaderWithFilter
|
|
},
|
|
{
|
|
headerName: 'Typ',
|
|
field: 'typeText',
|
|
width: 70,
|
|
cellRenderer: TypeRenderer,
|
|
sortable: false,
|
|
suppressSorting: true,
|
|
filter: CheckboxFilter,
|
|
filterParams: {
|
|
filterOptions: [
|
|
{
|
|
value: 'income',
|
|
label: 'Einnahme',
|
|
color: 'success',
|
|
dotStyle: {
|
|
width: '8px',
|
|
height: '8px',
|
|
backgroundColor: '#388e3c'
|
|
},
|
|
condition: (fieldValue) => fieldValue === 'Einnahme'
|
|
},
|
|
{
|
|
value: 'expense',
|
|
label: 'Ausgabe',
|
|
color: 'error',
|
|
dotStyle: {
|
|
width: '8px',
|
|
height: '8px',
|
|
backgroundColor: '#d32f2f'
|
|
},
|
|
condition: (fieldValue) => fieldValue === 'Ausgabe'
|
|
}
|
|
]
|
|
},
|
|
floatingFilter: false,
|
|
headerComponent: TextHeaderWithFilter
|
|
},
|
|
{
|
|
headerName: 'JTL',
|
|
field: 'hasJTL',
|
|
width: 70,
|
|
cellRenderer: JtlRenderer,
|
|
sortable: false,
|
|
suppressSorting: true,
|
|
filter: CheckboxFilter,
|
|
filterParams: {
|
|
filterOptions: [
|
|
{
|
|
value: 'present',
|
|
label: 'Vorhanden',
|
|
color: 'success',
|
|
dotStyle: {
|
|
width: '12px',
|
|
height: '12px',
|
|
backgroundColor: '#388e3c',
|
|
border: 'none',
|
|
fontSize: '8px',
|
|
color: 'white',
|
|
fontWeight: 'bold',
|
|
content: '✓'
|
|
},
|
|
condition: (fieldValue) => fieldValue === true
|
|
},
|
|
{
|
|
value: 'missing',
|
|
label: 'Fehlend',
|
|
color: 'error',
|
|
dotStyle: {
|
|
width: '12px',
|
|
height: '12px',
|
|
backgroundColor: '#f5f5f5',
|
|
border: '1px solid #ccc'
|
|
},
|
|
condition: (fieldValue) => fieldValue === false
|
|
},
|
|
{
|
|
value: 'undefined',
|
|
label: 'Unbekannt',
|
|
color: 'warning',
|
|
dotStyle: {
|
|
width: '12px',
|
|
height: '12px',
|
|
backgroundColor: '#fff3cd',
|
|
border: '1px solid #ffc107',
|
|
fontSize: '8px',
|
|
color: '#856404',
|
|
fontWeight: 'bold',
|
|
content: '?'
|
|
},
|
|
condition: (fieldValue) => fieldValue === undefined
|
|
}
|
|
]
|
|
},
|
|
floatingFilter: false,
|
|
headerComponent: TextHeaderWithFilter
|
|
},
|
|
{
|
|
headerName: 'Dokumente',
|
|
field: 'documents',
|
|
width: 90,
|
|
cellRenderer: DocumentRenderer,
|
|
sortable: false,
|
|
filter: false,
|
|
headerComponent: TextHeaderWithFilter
|
|
}
|
|
];
|
|
|
|
export const defaultColDef = {
|
|
resizable: true,
|
|
sortable: true,
|
|
filter: true,
|
|
floatingFilter: false,
|
|
suppressHeaderMenuButton: false
|
|
};
|
|
|
|
export const gridOptions = {
|
|
animateRows: true,
|
|
rowSelection: false,
|
|
rowBuffer: 10,
|
|
// Enable virtualization (default behavior)
|
|
suppressRowVirtualisation: false,
|
|
suppressColumnVirtualisation: false,
|
|
// Performance optimizations
|
|
suppressChangeDetection: false,
|
|
// Row height
|
|
rowHeight: 26,
|
|
headerHeight: 40,
|
|
// Pagination (optional - can be removed for infinite scrolling)
|
|
pagination: false,
|
|
paginationPageSize: 100,
|
|
// Disable cell selection
|
|
suppressCellSelection: true,
|
|
suppressRowClickSelection: true,
|
|
suppressCellFocus: true
|
|
};
|