App-Dochazka-WWW

 view release on metacpan or  search on metacpan

share/js/dochazka-www/dform-init.js  view on Meta::CPAN

"use strict";

define ([
    'current-user',
    'lib',
    'app/emp-lib',
    'app/entries',
    'app/rest-lib',
    'app/sched-lib',
    'app/prototypes',
    'target'
], function (
    currentUser,
    coreLib,
    empLib,
    entries,
    restLib,
    schedLib,
    prototypes,
    target
) {

    return function () {

        target.push('createLastPlusOffset', {
            // before doing any calculations, look up:
            // - employee's schedule
            // - schedule intervals on date
            // - existing intervals on date
            // timerange start will be:
            // - end of last existing interval, if there are existing intervals
            // - start of first schedule interval, if there are schedule intervals
            // - 00:00 otherwise
            // timerange end will be timerange start plus offset
            'name': 'createLastPlusOffset',
            'type': 'dform',
            'menuText': "Last plus offset",
            'title': "Create interval \"last plus offset\"",
            'preamble': "You entered an offset without a start time. Deriving start " +
                        "time from schedule and last existing interval (if any).",
            'aclProfile': 'active',
            'entriesRead': [
                entries.acTaid,
                entries.iNsid,
                entries.iNdateHidden,
                entries.iNactHidden,
                entries.iNschedintvls,
                entries.iNlastexistintvl,
                entries.iNoffset,
                entries.iNlastplusoffset,
                coreLib.emptyLineEntry,
                entries.iNtoBeCreated,
            ],
            'entriesWrite': [
                entries.iNdate,
                entries.iNtimerange,
                entries.iNact,
                entries.iNdesc,
            ],
            'rememberState': true,
            'miniMenu': {
                entries: ['createSingleIntSave'],
            }
        }); // createLastPlusOffset

        target.push('createMultipleInt', {
            'name': 'createMultipleInt',
            'type': 'dform',
            'menuText': 'Create multiple',
            'title': 'Create multiple intervals according to schedule',
            'preamble': "Hints: (1) TAB or ENTER to validate and advance to next field " +
                        "(2) enter month by name (e.g. \"June\") or number (e.g. \"6\"); " +
                        "DEFAULT: current month " +
                        "(3) enter days as " +
                        "an inclusive range (e.g. \"15-18\"), as a comma-separated list (e.g. " +
                        "\"7, 9, 28\"), or as a combination of the two (e.g. \"1, 3-5, 16-20\"); " +
                        "DEFAULT: entire month " +
                        "(4) Use 'Select activity' if you don't know activity code " +
                        '(5) Description is optional',
            'aclProfile': 'active',
            'entriesRead': [
                entries.iNdaterangeBegin,
                entries.iNdaterangeEnd,
                entries.iNyearHidden,
            ],
            'entriesWrite': [
                entries.iNyear,
                entries.iNmonth,
                entries.iNdaylist,
                entries.iNact,
                entries.iNdesc,
            ],
            'rememberState': true,
            'miniMenu': {
                entries: ['selectActivityAction', 'createMultipleIntSave', 'viewIntervalsAction']
            }
        }); // createMultipleInt

        target.push('createNextScheduled', {
            // before doing any calculations, look up/calculate:
            // - employee's schedule
            // - existing intervals on date
            // - schedule intervals on date
            // timerange will be:
            // - first schedule interval that does not conflict/overlap with an existing interval
            'name': 'createNextScheduled',
            'type': 'dform',
            'menuText': "Next scheduled interval",
            'title': "Create interval \"next scheduled\"",
            'aclProfile': 'active',
            'entriesRead': [
                entries.acTaid,
                entries.iNsid,
                entries.iNdateHidden,
                entries.iNactHidden,
                entries.iNschedintvls,
                entries.iNexistintvls,
                entries.iNnextscheduled,
                coreLib.emptyLineEntry,
                entries.iNtoBeCreated,
            ],
            'entriesWrite': [
                entries.iNdate,
                entries.iNtimerange,
                entries.iNact,
                entries.iNdesc,
            ],
            'rememberState': true,
            'miniMenu': {
                entries: ['selectActivityAction', 'createSingleIntSave'],
            }
        }); // createNextScheduled

        target.push('createSingleInt', {
            'name': 'createSingleInt',
            'type': 'dform',
            'menuText': 'Create',
            'title': 'Create an arbitrary interval',
            'preamble': "Hints: (1) TAB or ENTER to validate and advance to next field " +
                        "(2) date YYYY-MM-DD; year is optional " +
                        "(3) time range HH:MM-HH:MM or HH:MM+HH:MM (start time plus offset) " +
                        "or +HH:MM (last existing interval plus offset) or + (next scheduled " +
                        "interval) (4) Use 'Select activity' if you don't know activity code " +
                        '(5) Description is optional',
            'aclProfile': 'active',
            'entriesWrite': [entries.iNdate, entries.iNtimerange, entries.iNact, entries.iNdesc,],
            'rememberState': true,
            'miniMenu': {
                entries: ['selectActivityAction', 'createSingleIntSave']
            }
        }); // createSingleInt

        target.push('createLock', {
            'name': 'createLock',
            'type': 'dform',
            'menuText': 'Create',
            'title': 'Create a Lock',
            'preamble': "Hints: (1) TAB or ENTER to validate and advance to next field ",
            'aclProfile': 'active',
            'entriesWrite': [entries.iNyear, entries.iNmonth,],
            'rememberState': true,
            'miniMenu': {
                entries: ['createLockSave']
            }
        }); // createLock

        target.push('createSingleIntFixedDay', {
            'name': 'createSingleIntFixedDay',
            'type': 'dform',
            'menuText': 'Create',
            'title': 'Create an arbitrary interval',
            'preamble': "Hints: (1) TAB or ENTER to validate and advance to next field " +
                        "(2) time range HH:MM-HH:MM " +
                        "(3) Use 'Select activity' if you don't know activity code " +
                        '(4) Description is optional',
            'aclProfile': 'active',
            'entriesRead': [entries.iNdate,],
            'entriesWrite': [entries.iNtimerangeNoOffset, entries.iNact, entries.iNdesc,],
            'rememberState': true,
            'miniMenu': {
                entries: ['selectActivityAction', 'createSingleIntSave']
            }
        }); // createSingleIntFixedDay

        target.push('displaySingleInt', {
            'name': 'displaySingleInt',
            'type': 'dform',
            'menuText': 'Single interval',
            'title': 'Display a single interval',
            'aclProfile': 'active',
            'entriesRead': [entries.iNdaterange, entries.iNtimerange, entries.iNact, entries.iNdesc,],
            'miniMenu': {
                entries: []
            }
        }); // displaySingleInt

        target.push('empProfile', {
            'name': 'empProfile',
            'type': 'dform',
            'menuText': 'Profile',
            'title': 'Employee profile',
            'preamble': null,
            'aclProfile': 'passerby',
            'entriesRead': [
                entries.ePfullname, entries.ePnick,
                entries.ePsec_id, entries.ePemail,
                entries.ePremark,
                coreLib.emptyLineEntry,
                entries.ePsuperNick, entries.ePhasReports,
                coreLib.emptyLineEntry,
                entries.ePpriv, entries.ePprivEffective,
                coreLib.emptyLineEntry,
                entries.ePscode, entries.ePsid, entries.ePschedEffective
            ],
            'miniMenu': {
                entries: [
                    'actionPrivHistory',
                    'actionSchedHistory',
                    'empProfileEdit',
                    'ldapSync',
                    'empProfileSetSuperSearch',
                    'empProfileSetSuperDelete',
                ]
            }
        }); // empProfile

        target.push('empProfileEdit', {
            'name': 'empProfileEdit',
            'type': 'dform',
            'menuText': 'Edit remark',
            'title': 'Employee profile edit',
            'preamble': 'Only the remark field can be modified;<br>' +
                        'All other fields are synced from LDAP',
            'aclProfile': 'admin',
            'entriesRead': [entries.ePfullname, entries.ePnick,
                entries.ePsec_id, entries.ePemail],
            'entriesWrite': [entries.ePremark],
            'miniMenu': {
                entries: ['empProfileEditSave']
            }
        }); // empProfileEdit

        target.push('empProfileSetSuperConfirm', {
            'name': 'empProfileSetSuperConfirm',
            'type': 'dform',
            'menuText': 'empProfileSetSuperConfirm',
            'title': 'Set employee supervisor - confirmation',
            'preamble': 'Do you really want to do this?',
            'aclProfile': 'admin',
            'entriesRead': [
                entries.ePsetsuperofEID,
                entries.ePsetsupertoEID,
                entries.ePsetsuperof,
                entries.ePsetsuperto,
            ],
            'miniMenu': {
                entries: ['empProfileSetSuperCommit']
            }
        }); // empProfileEdit

        target.push('ldapDisplayEmployee', {
            'name': 'ldapDisplayEmployee',
            'type': 'dform',
            'title': 'LDAP employee record',
            'preamble': null,
            'aclProfile': 'active',
            'entriesRead': [entries.ePfullname, entries.ePnick,
                entries.ePsec_id, entries.ePemail, entries.LDAPdochazka],
            'miniMenu': {
                entries: ['ldapSync']
            }
        }); // ldapDisplayEmployee

        target.push('ldapLookup', {
            'name': 'ldapLookup',
            'type': 'dform',
            'menuText': 'Look up an LDAP employee',
            'title': 'Look up an LDAP employee',
            'preamble': 'Enter employee nick for exact (case insensitive) match',
            'aclProfile': 'active',
            'entriesWrite': [entries.ePnick],
            'rememberState': true,
            'miniMenu': {
                entries: ['ldapLookupSubmit']
            }
        }); // ldapLookup

        target.push('privHistoryAddRecord', {
            'name': 'privHistoryAddRecord',
            'type': 'dform',
            'menuText': 'Add record',
            'title': 'Add privhistory (status) record',
            'preamble': '<b>Effective</b> date format YYYY-MM-DD;<br>' +
                        '<b>Priv</b> one of (passerby, inactive, active, admin)',
            'aclProfile': 'admin',
            'entriesRead': [entries.ePnick], 
            'entriesWrite': [entries.pHeffective, entries.pHpriv],
            'miniMenu': {
                entries: ['privHistorySaveAction']
            }
        }); // privHistoryAddRecord

        target.push('schedHistoryAddRecord', {
            'name': 'schedHistoryAddRecord',
            'type': 'dform',
            'menuText': 'Add record',
            'title': 'Add schedule history record',
            'preamble': '<b>Effective date</b> format YYYY-MM-DD;<br>' +
                        'Enter schedule ID or schedule code - not both',
            'aclProfile': 'admin',
            'entriesRead': [entries.ePnick],
            'entriesWrite': [entries.pHeffective, entries.sDid, entries.sDcode],
            'miniMenu': {
                entries: ['schedHistorySaveAction']
            }
        }); // schedHistoryAddRecord

        target.push('restServerDetails', {
            'name': 'restServerDetails',
            'type': 'dform',
            'menuText': 'REST server',
            'title': 'REST server details',
            'aclProfile': 'admin',
            'entriesRead': [entries.rSDurl, entries.rSDversion],
            'miniMenu': {
                entries: []
            }
        }); // restServerDetails

        target.push('schedDisplay', {
            'name': 'schedDisplay',
            'type': 'dform',
            'menuText': 'schedDisplay',
            'title': 'Schedule',
            'aclProfile': 'passerby',
            'entriesRead': [entries.sDid, entries.sDcode,
                            coreLib.emptyLineEntry, entries.sDmon,
                            entries.sDtue, entries.sDwed, entries.sDthu,
                            entries.sDfri, entries.sDsat, entries.sDsun,
                            coreLib.emptyLineEntry, entries.ePremark],
            'miniMenu': {
                entries: ['schedEdit', 'schedDelete']
            }
        }); // schedDisplay

        var schedEditObj = {
                'type': 'dform',
                'menuText': 'Edit',
                'title': 'Schedule edit',
                'preamble': 'Only schedule code and remark can be modified<br>' +
                            'Note: code change will affect <b>all employees</b> with this schedule',
                'aclProfile': 'admin',
                'entriesRead': [entries.sDid,
                                coreLib.emptyLineEntry, entries.sDmon,
                                entries.sDtue, entries.sDwed, entries.sDthu,
                                entries.sDfri, entries.sDsat, entries.sDsun],
                'entriesWrite': [entries.sDcode, entries.ePremark],
                'miniMenu': {
                    entries: ['schedEditSave']
                }
            },
            schedEditFromBrowserObj = coreLib.shallowCopy(schedEditObj);

        schedEditObj['name'] = 'schedEdit';
        target.push('schedEdit', schedEditObj);
        schedEditFromBrowserObj['name'] = 'schedEditFromBrowser';
        target.push('schedEditFromBrowser', schedEditFromBrowserObj);

        var schedDeleteObj = {
                'type': 'dform',
                'menuText': 'Delete',
                'title': 'Schedule delete',
                'preamble': 'If you are really sure you want to delete this schedule,<br>' +
                            'select "Yes, I really mean it" below',
                'aclProfile': 'admin',
                'entriesRead': [entries.sDid, entries.sDcode,
                                coreLib.emptyLineEntry, entries.sDmon,
                                entries.sDtue, entries.sDwed, entries.sDthu,
                                entries.sDfri, entries.sDsat, entries.sDsun,
                                coreLib.emptyLineEntry, entries.ePremark],
                'miniMenu': {
                    entries: ['schedReallyDelete']
                }
            },
            schedDeleteFromBrowserObj = coreLib.shallowCopy(schedDeleteObj);

        schedDeleteObj.name = 'schedDelete';
        target.push('schedDelete', schedDeleteObj);
        schedDeleteFromBrowserObj['name'] = 'schedDeleteFromBrowser';
        target.push('schedDeleteFromBrowser', schedDeleteFromBrowserObj);

        target.push('schedLookup', {
            'name': 'schedLookup',
            'type': 'dform',
            'menuText': 'Look up schedule by code or ID',
            'title': 'Look up schedule by code or ID',
            'preamble': 'Enter a schedule code or ID (must be an exact match)',
            'aclProfile': 'passerby',
            'entriesWrite': [entries.sScode, entries.sSid],
            'rememberState': true,
            'miniMenu': {
                entries: ['actionSchedLookup']
            }
        }); // schedLookup

        target.push('schedNewBoilerplate', {
            'name': 'schedNewBoilerplate',
            'type': 'dform',
            'menuText': 'Boilerplate (quick form for Mon-Fri schedules)',
            'title': 'Create a new schedule - boilerplate',
            'preamble': 'Hint: separate schedule intervals by semi-colon<br>' +
                        'Example: 8:00-12:00; 12:30-16:30<br>' +
                        '<b>Schedule intervals will be replicated for Monday-Friday</b><br>' +
                        'Note: schedule code is optional',
            'aclProfile': 'admin',
            'entriesRead': [entries.sDid],
            'entriesWrite': [entries.sCboiler, entries.sDcode],
            'miniMenu': {
                entries: ['createSchedule']
            }
        }); // schedNewBoilerPlate

        target.push('schedNewCustom', {
            'name': 'schedNewCustom',
            'type': 'dform',
            'menuText': 'Custom (long form)',
            'title': 'Create a new schedule - custom',
            'preamble': 'Hint: separate schedule intervals by semi-colon<br>' +
                        'Example: 8:00-12:00; 12:30-16:30<br>' +
                        'Note: schedule code is optional',
            'aclProfile': 'admin',
            'entriesRead': [entries.sDid],
            'entriesWrite': [entries.sDmon, entries.sDtue,
                             entries.sDwed, entries.sDthu, entries.sDfri,
                             entries.sDsat, entries.sDsun, entries.sDcode],
            'miniMenu': {
                entries: ['createSchedule']
            }
        }); // schedNewCustom

        target.push('searchEmployee', {
            'name': 'searchEmployee',
            'type': 'dform',
            'menuText': 'Search Dochazka employees',
            'title': 'Search Dochazka employees',
            'preamble': 'Enter search key, % is wildcard',
            'aclProfile': 'admin',
            'entriesWrite': [entries.sEnick],
            'miniMenu': {
                entries: ['actionEmplSearch']
            }
        }); // searchEmployee

        target.push('updateSingleInt', {
            'name': 'updateSingleInt',
            'type': 'dform',
            'menuText': 'Update',
            'title': 'Update an interval',
            'preamble': "Hints: (1) TAB or ENTER to validate and advance to next field " +
                        "(2) time range HH:MM-HH:MM " +
                        "(3) Use 'Select activity' if you don't know activity code " +
                        '(4) Description is optional',
            'aclProfile': 'active',
            'entriesRead': [entries.iNdate, entries.acTaid],
            'entriesWrite': [entries.iNtimerangeNoOffset, entries.iNact, entries.iNdesc,],
            'rememberState': true,
            'miniMenu': {
                entries: ['selectActivityAction', 'updateSingleIntSave']
            }
        }); // updateSingleInt

        target.push('viewIntervalsPrep', {
            'name': 'viewIntervalsPrep',
            'type': 'dform',
            'menuText': 'View',
            'title': 'View intervals for date or range of dates',
            'preamble': "Hints: (1) TAB or ENTER to validate and advance to next field " +
                        "(2) enter month by name (e.g. \"June\") or number (e.g. \"6\"); " +
                        "DEFAULT: current month " +
                        "(3) enter days as a singleton (e.g. \"13\") or inclusive range (e.g. \"15-18\") " +
                        "DEFAULT: entire month",
            'aclProfile': 'inactive',
            'entriesRead': [
                entries.iNdaterangeBegin,
                entries.iNdaterangeEnd,
                entries.iNyearHidden,
            ],
            'entriesWrite': [
                entries.iNyear,
                entries.iNmonth,
                entries.iNdayrange,
            ],
            'rememberState': true,
            'miniMenu': {
                entries: ['viewIntervalsAction']
            }
        }); // viewIntervalsPrep

        target.push('viewLocksPrep', {
            'name': 'viewLocksPrep',
            'type': 'dform',
            'menuText': 'View',
            'title': 'View locks',
            'preamble': "Hints: (1) TAB or ENTER to validate and advance to next field " +
                        "(2) enter month by name (e.g. \"June\") or number (e.g. \"6\"); " +
                        "DEFAULT: current month ",
            'aclProfile': 'inactive',
            'entriesWrite': [
                entries.iNyear,
            ],
            'rememberState': true,
            'miniMenu': {
                entries: ['viewLocksAction']
            }
        }); // viewLocksPrep

    }; // return function ()
    
});



( run in 1.095 second using v1.01-cache-2.11-cpan-acf6aa7dc9e )