Skip to content
Snippets Groups Projects
Select Git revision
  • e0b15e4f6b73d2de964973563cb48e1e1e1f5e38
  • master default
  • renovate/junit-jupiter-engine.version
  • renovate/selenium.version
  • renovate/testcontainer.version
  • demo
  • v1_8_1
  • v2.18.1
  • v2.18.0
  • v2.17.2
  • v2.17.1
  • v2.17.0
  • v2.16.1
  • v2.16.0
  • v2.15.1
  • v2.15.0
  • v2.14.0
  • v2.13.0
  • v2.12.0
  • v2.11.0
  • v2.10.0
  • v2.9.2
  • v2.9.1
  • v2.9.0
  • v2.8.0
  • testPipeline2
  • v2.7.0
27 results

transactionImport.js

Blame
  • transactionImport.js 3.99 KiB
    $(document).ready(function()
    {
        M.FloatingActionButton.init(document.querySelectorAll('.edit-transaction-button'), {
            direction: 'left',
            hoverEnabled: false
        });
    
        $('.collapsible').collapsible();
    
        $('#table-transaction-rows').DataTable({
            paging: false,
            order: [[2, 'desc']],
            info: false,
            scrollX: true,
            scrollY: false,
            columnDefs: [
                { orderable: false, targets:  6}
            ],
            language: { search: '' , searchPlaceholder: localizedSearch},
        });
    
        if(transactionNameSuggestions !== undefined)
        {
            let nameElements = document.querySelectorAll('.autocomplete');
            let autoCompleteInstances = M.Autocomplete.init(nameElements, {
                data: transactionNameSuggestions,
                sortFunction: function(a,b, inputString) {return false;}
            });
    
            // prevent tab traversal for dropdown (otherwise "tab" needs to be hit twice to jump from name input to amount input)
            for(let i = 0; i < autoCompleteInstances.length; i++)
            {
                autoCompleteInstances[i].dropdown.dropdownEl.tabIndex = -1;
            }
        }
    
        initCsvTransactions();
    });
    
    function initCsvTransactions()
    {
        initCsvTransactionForms();
        initCsvTransactionButtons();
    
        initCustomSelects();
    
        M.FloatingActionButton.init(document.querySelectorAll('.edit-transaction-button'), {
            direction: 'left',
            hoverEnabled: false
        });
    }
    
    function initCsvTransactionForms()
    {
        const forms = document.querySelectorAll('[name="NewTransactionInPlace"]');
    
        for(let i = 0; i < forms.length; i++)
        {
            let form = forms[i];
            form.removeEventListener('submit', submitTransactionInPlaceForm);
            form.addEventListener('submit', submitTransactionInPlaceForm);
        }
    }
    
    function submitTransactionInPlaceForm(event)
    {
        const form = event.target;
        const csvTransactionId = form.dataset.index;
    
        $.ajax({
            type: 'POST',
            url: $(this).attr('action'),
            data: new FormData(form),
            processData: false,
            contentType: false,
            success: function(response)
            {
                $('#transaction-import-row-' + csvTransactionId).replaceWith(response);
                initCsvTransactions();
            },
            error: function(response)
            {
                M.toast({
                    html: "Error saving transaction",
                    classes: 'red'
                });
                console.error(response);
            }
        });
    
        event.preventDefault();
    }
    
    function initCsvTransactionButtons()
    {
        const buttonsSkip = document.getElementsByClassName('button-request-transaction-import-skip');
        for(let i = 0; i < buttonsSkip.length; i++)
        {
            const button = buttonsSkip[i];
            button.removeEventListener('click', skipRow);
            button.addEventListener('click', skipRow);
        }
    
        const buttonsUndoSkip = document.getElementsByClassName('button-request-transaction-import-undo-skip');
        for(let i = 0; i < buttonsUndoSkip.length; i++)
        {
            const button = buttonsUndoSkip[i];
            button.removeEventListener('click', undoSkipRow);
            button.addEventListener('click', undoSkipRow);
        }
    }
    
    function skipRow(event)
    {
        performCsvTransactionGetRequestWithoutReload(event.currentTarget, 'Error skipping transaction');
    }
    
    function undoSkipRow(event)
    {
        performCsvTransactionGetRequestWithoutReload(event.currentTarget, 'Error undo skip transaction');
    }
    
    function performCsvTransactionGetRequestWithoutReload(button, errorMessage)
    {
        const url = button.dataset.url;
        const csvTransactionId = button.dataset.index;
    
        $.ajax({
            type: 'GET',
            url: url,
            data: {},
            success: function(data)
            {
                $('#transaction-import-row-' + csvTransactionId).replaceWith(data);
                initCsvTransactions();
            },
            error: function(response)
            {
                M.toast({
                    html: errorMessage,
                    classes: 'red'
                });
                console.error(response);
            }
        });
    }