<br />
<b>Warning</b>:  session_start(): open(\\sess_rmjars6uon7ac7khvrreaduds7, O_RDWR) failed: No such file or directory (2) in <b>M:\User Files\jeff\BookKeeper\www\public\index.php</b> on line <b>4</b><br />
<br />
<b>Warning</b>:  session_start(): Failed to read session data: files (path: \) in <b>M:\User Files\jeff\BookKeeper\www\public\index.php</b> on line <b>4</b><br />
    <!DOCTYPE html>
<html lang="en">
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta charset="utf-8">
    <meta content="#373a3c" name="theme-color">
    <title>BookKeeper :: Dashboard</title>
        <!-- Start Dynamically Loaded CSS from Page 'css' -->
            <link href="/css/bootstrap.4.5.2.css" rel="stylesheet" type="text/css" />
            <link href="/css/theme.bootstrap_4.min.css" rel="stylesheet" type="text/css" />
            <link href="/css/sb-admin.css" rel="stylesheet" type="text/css" />
            <link href="/css/all.css" rel="stylesheet" type="text/css" />
                <script src="/js/jquery.3.5.1.js"></script>
            <script src="/js/bootstrap.4.5.2.js"></script>
            <script src="/js/momentjs.2.29.1.js"></script>
            <script src="/js/chart.2.9.3.js"></script>
            <script src="/js/tablesorter.2.31.3.js"></script>
            <script src="/js/popper.js"></script>
            <script src="/js/utils.js"></script>
        <!-- Block for Head Includes -->
                    <link id="theme" rel="stylesheet" href="/css/theme/"/>
        <link href="/css/theme-overrides.css" rel="stylesheet" type="text/css" />
    <link href="/css/layout.css" rel="stylesheet" type="text/css" />

</head>
<body>
<nav class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0">
    <span class="navbar-brand col-sm-3 col-md-2 mr-0"><a href="/">BookKeeper</a></span>
    <input id="global-search" class="form-control form-control-dark w-100" type="text" placeholder="Search" aria-label="Search">
    <div id="search-results"></div>
    <ul class="navbar-nav px-3">
        <li class="nav-item text-nowrap">
        </li>
    </ul>
</nav>
<div class="container-fluid">
    <div class="row">
        <nav class="col-md-2 d-none d-md-block bg-light sidebar">
            <div class="sidebar-sticky">
                <ul class="nav flex-column">
                    <li class="nav-item">
                        <span class="toggle nav-link click active text-primary bg-white" data-toggle="#dash-collapse">
                            <i class="fas fa-fw fa-home"></i> Dashboard
                        </span>
                        <div class="bg-light" id="dash-collapse" style="">
                            <ul class="list-group list-group-flush">
                                <li class="list-group-item click font-weight-bold"><a href="index.php">Quick View</a></li>
                                <li class="list-group-item click "><a href="index.php?_route=report">Reports</a></li>
                            </ul>
                        </div>
                    </li>
                    <li class="nav-item">
                        <span class="toggle nav-link click " data-toggle="#crm-collapse">
                            <i class="fas fa-fw fa-users"></i> CRM
                        </span>
                        <div class="bg-light" id="crm-collapse" style="display:none;">
                            <ul class="list-group list-group-flush">
                                <li class="list-group-item click "><a href="index.php?_route=customer&_action=list">Customers</a></li>
                                <li class="list-group-item click "><a href="index.php?_route=vehicle&_action=list">Vehicles</a></li>
                            </ul>
                        </div>
                    </li>
                    <li class="nav-item">
                        <span class="toggle nav-link click " data-toggle="#ledger-collapse">
                            <i class="fas fa-fw fa-dollar-sign"></i> Ledger
                        </span>
                        <div class="bg-light" id="ledger-collapse" style="display:none;">
                            <ul class="list-group list-group-flush">
                                <li class="list-group-item click "><a href="index.php?_route=workorder&_action=list">Work Orders</a></li>
                                <li class="list-group-item click "><a href="index.php?_route=invoice&_action=list">Invoices</a></li>
                            </ul>
                        </div>
                    </li>
                    <li class="nav-item">
                        <a class="toggle nav-link click " href="index.php?_route=setting">
                            <i class="fas fa-fw fa-cog"></i> Settings
                                                                                                                </a>
                    </li>
                </ul>
            </div>
        </nav>
        <main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4">

                            <div class="row">
        <div class="col-md-12" style="margin-bottom: 25px;">
        <a href="index.php?_route=workorder&_action=editor&_id=new">
            <div class="btn btn-primary" style="width: 100%;">
                Get to Work!
            </div>
        </a>
        </div>
        <div class="col-md-4">
            <div class="card border-left-info shadow h-100 py-2">
                <div class="card-body">
                    <div class="row no-gutters align-items-center">
                        <div class="col mr-2">
                            <div class="text-sm font-weight-bold text-info text-uppercase mb-1">
                                Balance</div>
                            <div class="h4 mb-0 font-weight-bold text-gray-800">$ 0.00</div>
                        </div>
                        <div class="col-auto text-muted" style="opacity: 75%">
                            <i class="fas fa-dollar-sign"></i>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="col-md-4">
            <div class="card border-left-success shadow h-100 py-2">
                <div class="card-body">
                    <div class="row no-gutters align-items-center">
                        <div class="col mr-2">
                            <div class="text-sm font-weight-bold text-success text-uppercase mb-1">
                                Payments</div>
                            <div class="h4 mb-0 font-weight-bold text-gray-800">$ 0.00</div>
                        </div>
                        <div class="col-auto text-muted" style="opacity: 75%">
                            <i class="fas fa-dollar-sign"></i>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="col-md-4">
            <div class="card border-left-warning shadow h-100 py-2">
                <div class="card-body">
                    <div class="row no-gutters align-items-center">
                        <div class="col mr-2">
                            <div class="text-sm font-weight-bold text-warning text-uppercase mb-1">
                                Bills</div>
                            <div class="h4 mb-0 font-weight-bold text-gray-800">$ 0.00</div>
                        </div>
                        <div class="col-auto text-muted" style="opacity: 75%">
                            <i class="fas fa-dollar-sign"></i>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <div class="col-md-12" style="margin-top:25px;">
            <div class="card  border-left-dark shadow h-100 py-2">
                <div class="card-header text-sm font-weight-bold text-dark text-uppercase mb-1 bg-white">
                    Open Invoices
                </div>
                <table class="card-body table table-striped table-sm">
                    <thead>
                    <tr>
                        <th></th>
                        <th>ID</th>
                        <th>Customer</th>
                        <th>Project</th>
                        <th>Memo</th>
                        <th>Amount</th>
                        <th>Remaining</th>
                        <th>Due On</th>
                    </tr>
                    </thead>
                    <tbody>
                                            <tr><td colspan="8"> No Open Invoices</td></tr>
                                        </tbody>
                </table>
            </div>
        </div>
    </div>
                        <div id="slide-out" class="col-sm-6">
                slide out - <span class="slide-in btn btn-outline-secondary">back in</span>
            </div>
            <div style="height: 100px;">

            </div>
        </main>
    </div>
</div>

<script>
    utils.setThemeCss();
    function record() {
        var json = $('#json');
        if (json.length > 0) {
            console.log(JSON.parse(json.html()));
        }
    }
    function capitalizeFirstLetter(string) {
        return string.charAt(0).toUpperCase() + string.slice(1);
    }
    function parseGlobalResults(results) {
        var html = '<ul class="list-group list-group-flush">';
        for (var index = 0; index < results.length; index++) {
            var desc = [];
            if (results[index]['type'] === 'INV') {
                results[index]['type'] = 'invoice';
            }
            if (results[index]['type'] === 'PYMT') {
                results[index]['type'] = 'payment';
            }
            if (results[index]['type'] === 'BILL') {
                results[index]['type'] = 'bill';
            }
            if (results[index]['description1'] !== '') {
                desc.push(results[index]['description1']);
            }
            if (results[index]['description2'] !== '') {
                desc.push(results[index]['description2']);
            }
            var href = 'index.php?_route='+results[index]['type']+'&_action=editor&_id='+results[index]['id'];
            html += '<li class="list-group-item click"><a href="'+href+'">' +
                capitalizeFirstLetter(results[index]['type']) +': '+ results[index]['name'] + '<br>' + desc.join(', ')
                + '</a></li>';
        }
        html += '</ul>'
        return html;
    }
    function slideOut(html) {
        var slideOut = $('#slide-out');
        slideOut.html(html);
        slideOut.addClass('open')
        slideOut.animate({
            width:'40%',
            right:'0'
        });
    }
    function slideIn() {
        var slideOut = $('#slide-out');
        slideOut.animate({
            width:'0',
            right:'-30px'
        },500, function() {
            slideOut.removeClass('open')
            slideOut.html('');
        });
    }

    function selectTypeAheadAddAndSet(selector, value, text, change, filter) {
        if (typeof change === 'undefined' || change === null) {
            change = true;
        }
        if (typeof filter === 'undefined') {
            filter = null;
        }
        console.log('selectTypeAheadAddAndSet '+JSON.stringify({selector:selector, value:value, text:text, change:change, filter:filter}))
        var input = $(selector);
        var wrapper = input.closest('.select-type-ahead-wrapper');
        var displayInput = wrapper.find('.form-control')
        var listGroup = wrapper.find('ul.list-group');
        var html = '<li class="list-group-item list-group-item-action bg-dark text-white" data-value="'+value+'"'
            + (filter ? ' data-filter="'+filter+'"': '')
            + '>'+text+'</li>';
        console.log('selectTypeAheadAddAndSet html: '+html)
        listGroup.append(html)
        input.val(value)
        if (change) {
            input.change();
        }
        displayInput.val(text);
    }
    function selectTypeAheadSet(selector, value, change) {
        if (typeof change === 'undefined' || change === null) {
            change = true;
        }
        var input = $(selector);
        var wrapper = input.closest('.select-type-ahead-wrapper');
        var displayInput = wrapper.find('.form-control');
        var text = wrapper.find('ul.list-group li[data-value="'+value+'"]').html();
        input.val(value);
        console.log('selectTypeAheadSet value:'+value+' text:'+text)
        displayInput.val(text);
        if (change) {
            input.change();
        }
    }

    window.record = record;
    $(document).ready(function () {
        $(document).on('click','.slide-in', function() {
            slideIn();
        });
        $(document).on('click','.toggle',function() {
            console.log('toggle ' + $(this).attr('data-toggle'));
            $($(this).attr('data-toggle')).toggle();
        });

        $(document).on('click','.remove',function() {
            console.log('remove ' + $(this).attr('data-remove'));
            $($(this).attr('data-remove')).remove();
        });

        $(document).on('click','.tab-container li',function() {
            $('.tab-container li').removeClass('selected');
            $(this).addClass('selected');
            $('.tab-content div').removeClass('selected');
            $('.tab-content div#' + $(this).attr('data-tab')).addClass('selected');
        });

        $(document).on('click','.select-type-ahead .dropdown-toggle',function() {
            console.log('dropdown open')
            var wrapper = $(this).closest('.select-type-ahead');
            var dropdown = wrapper.find('.list-group');
            wrapper.find('.no-match').remove();
            if (dropdown.hasClass('open')) {
                dropdown.removeClass('open');
            } else {
                dropdown.addClass('open');
            }
        });

        $(document).on('keyup','.select-type-ahead input.form-control',function() {
            var wrapper = $(this).closest('.select-type-ahead');
            var dropdown = wrapper.find('.list-group');
            var value = $(this).val();
            utils.typewatch(function () {
                dropdown.find('.list-group-item').each(function() {
                    var text = $(this).html();
                    $(this).removeClass('hidden');
                    if (text.toLowerCase().indexOf(value.toLowerCase()) < 0) {
                        $(this).addClass('hidden');
                    }
                });
                if (wrapper.find('.list-group-item').length === wrapper.find('.list-group-item.hidden').length) {
                    dropdown.append('<li class="no-match list-group-item disabled">No Matches</li>')
                }
                if (value.trim() === '') {
                    $(this).removeClass('open');
                    dropdown.removeClass('open');
                } else {
                    $(this).addClass('open');
                    dropdown.addClass('open');
                }
            }, 500);
        });

        $(document).on('click', '.select-type-ahead .list-group-item-action',function() {
            if ($(this).hasClass('disabled')) {
                return false;
            }
            var wrapper = $(this).closest('.select-type-ahead');
            var input = wrapper.find('.select-type-ahead-value');
            var value = $(this).attr('data-value');
            var text = $(this).html();
            if (typeof value === 'undefined' || value === false) {
                value = text;
            }
            console.log('setting value ' + text + '=' +value + ' inpt.length ' + input.length + ' ' + input.attr('data-field'));
            input.val(value);
            input.attr('value',value).change();
            wrapper.find('input.form-control').val(text);
            wrapper.find('.dropdown-toggle').click();
        });

        $(document).on('change', '.select-type-ahead-value',function() {
            var wrapper = $(this).closest('.select-type-ahead');
            var html = wrapper.find('.list-group-item[data-value="' + $(this).val() + '"]').html();
            var input = wrapper.find('.form-control');
            input.val(html);
        });

        $(document).on('keyup', '#global-search', function() {
            var _this = $(this);
            var results = $('#search-results');
            if (_this.val().trim() === '') {
                results.hide().html('');
                return true;
            }
            utils.typewatch(function() {
                console.log('searching .. ' + _this.val());
                utils.ajax({
                    _route: 'dashboard',
                    _action: 'search',
                    search: _this.val()
                }, function(response) {
                    console.log(response);
                    if (response.results.length === 0) {
                        results.html('<br><h4>No Results</h4>')
                    } else {
                        results.html(parseGlobalResults(response.results))
                    }
                    results.show();
                });

            },500);
        });
        $(document).on('blur', '#global-search',function() {

            utils.typewatch(function() {

                $('#search-results').hide().html('');

            },700);
        })
    });
</script>

<script>
    $(document).ready(function () {
        $('.table').each(function () {
            if (!$(this).hasClass('no-sort')) {
                var headers = {};
                var index = 0;
                $(this).find('th').each(function() {
                    if ($(this).html().trim() === '' || $(this).hasClass('no-sort')) {
                        headers[index] = {sorter:false}
                    }
                    index++;
                });
                $(this).addClass('tablesorter');
                $(this).tablesorter({
                    theme: "bootstrap",
                    headers: headers
                });
            }
        });
    });

</script>
</body>
</html>
