App-Dochazka-WWW

 view release on metacpan or  search on metacpan

share/js/dochazka-www/int-lib.js  view on Meta::CPAN

                });
                return false;
            }
            return true;
        },

        createMultipleIntSave = function (obj) {
            var cu = currentUser('obj'),
                daylist = $('input[id="iNdaylist"]').val(),
                month = $('input[id="iNmonth"]').val(),
                year = $('input[id="iNyear"]').val(),
                dl = daylist.split(','),
                i, rest, sc, fc;
            // validate activity
            if (obj.code) {
                console.log("Looking up activity " + obj.code + " in cache");
                i = appCaches.getActivityByCode(obj.code);
                if (! i) {
                    coreLib.displayError('Activity ' + obj.code + ' not found');
                    return null;
                }
                obj.aid = i.aid;
            } else {
                coreLib.displayError("Interval activity code missing");
                return null;
            }
            // validate day list
            if (! coreLib.isArray(dl) || dl.length === 0) {
                coreLib.displayError("Invalid day list");
                return null;
            }
            for (i = 0; i < dl.length; i += 1) {
                dl[i] = year + '-' + dt.monthToInt(month) + '-' + dl[i];
            }
            console.log("Date list", dl);
            rest = {
                "method": "POST",
                "path": "interval/fillup",
                "body": {
                    'date_list': dl,
                    'dry_run': '0',
                    'eid': String(cu.eid),
                    'aid': obj.acTaid,
                },
            };
            sc = function (st) {
                if (st.code === "DISPATCH_FILLUP_INTERVALS_CREATED") {
                    coreLib.displayResult(
                        st.payload.success.intervals.length + " intervals created; " +
                        st.payload.failure.intervals.length + " intervals failed"
                    );
                } else if (st.code === "DISPATCH_FILLUP_NO_INTERVALS_CREATED") {
                    coreLib.displayResult("The dates in question already have 100% schedule fulfillment");
                } else {
                    coreLib.displayError(st.text);
                }
            };
            ajax(rest, sc);
        },

        createSingleIntMenuItem = function (obj) {
            stack.push('createSingleInt');
        },

        createSingleIntSave = function (obj) {
            var caller = stack.getTarget().name,
                cu = currentUser('obj'),
                rest,
                sc = function (st) {
                    if (caller === 'createSingleIntFixedDay') {
                        stack.unwindToTarget('viewIntervalsAction');
                    } else {
                        stack.unwindToTarget(
                            'createSingleInt',
                            emptyObj,
                            {
                                "resultLine": "Interval " + st.payload.iid + " created",
                                "inputId": "iNdate",
                            }
                        );
                    }
                };
            console.log("Entering createSingleIntSave() from caller " + caller + " with obj", obj);
            if (caller === 'createSingleInt' || caller === 'createSingleIntFixedDay') {
                // obj already populated
            } else if (caller === 'createLastPlusOffset' || caller === 'createNextScheduled') {
                // Scrape time range from form
                // (The "createLastPlusOffset" dform has no inputs (writable
                // entries); instead, it has spans (read-only entries) that are
                // populated asynchronously and obj does not contain any of
                // the new values. In this case, the time range is residing
                // in one of the spans.)
                // Scrape time range from form
                obj.iNdate = $('input[id="iNdate"]').val();
                obj.iNtimerange = $('input[id="iNtimerange"]').val();
                obj.code = $('input[id="iNact"]').val();
                obj.long_desc = $('input[id="iNdesc"]').val();
            } else {
                console.log("CRITICAL ERROR: unexpected caller", caller);
                return null;
            }
            if (obj.iNtimerange === '+') {
                stack.push('createNextScheduled', obj);
                return null;
            }
            if (obj.iNtimerange.match(/\+/)) {
                obj.iNoffset = obj.iNtimerange;
                stack.push('createLastPlusOffset', obj);
                return null;
            }
            if (! createIntervalCheckMandatoryProps(obj)) {
                return null;
            }
            obj["intvl"] = genIntvl(obj.iNdate, obj.iNtimerange);
            if (! obj.intvl) {
                return null;
            }
            rest = {
                "method": 'POST',
                "path": 'interval/new',
                "body": {

share/js/dochazka-www/int-lib.js  view on Meta::CPAN

                },
                fc = function (st) {
                    var opts = { "resultLine": st.payload.message };
                    if (st.code === 'DISPATCH_NOTHING_IN_TSRANGE' ) {
                        if (multipleDates) {
                            opts['xtarget'] = 'viewIntervalsPrep'; // so we don't land in viewIntervalsAction
                            obj = {
                                "beginDate": begin,
                                "endDate": end,
                                "intervals": [],
                            };
                            stack.push('multiDayViewer', obj, opts);
                        } else {
                            stack.pop(undefined, opts);
                        }
                    } else {
                        opts.resultLine += ' (unexpected status code ' + st.code + ')';
                        stack.pop(undefined, opts);
                    }
                };
            [begin, end] = viewIntervalsActionCache();
            multipleDates = (begin === end) ? false : true;
            rest = {
                "method": 'GET',
                "path": 'interval/eid/' + cu.eid + "/[" + String(begin) + " 00:00, " + String(end) + " 24:00 )",
            };
            ajax(rest, sc, fc);
        },
        viewIntervalsCache = [],

        viewIntervalsMultiDayCallback = function (obj, title, preamble) {
            var i, r = '';
            preamble = preamble
                         .replace(/\[BEGIN\]/, obj.beginDate)
                         .replace(/\[END\]/, obj.endDate);
            r += "<b>" + title + "</b><br><br>";
            r += preamble + "<br><br>";
            return r;
        },

        viewIntervalsMultiDayCallbackRaw = function (obj) {
            var r = '';
            r += "<pre>";
            if (typeof obj === 'object') {
                r += JSON.stringify(obj, null, 2);
            } else if (typeof obj === 'string') {
                r += obj;
            } else {
                console.log("viewIntervalsMultiDayCallbackRaw(): CRITICAL ERROR: bad object", obj);
                r += 'ERROR<br>';
            }
            r += "</pre><br>";
            return r;
        }
        ;

    // here is where we define methods implementing the various
    // interval-related actions (see daction-start.js)
    return {
        createMultipleIntSave: createMultipleIntSave,
        createSingleIntMenuItem: createSingleIntMenuItem,
        createSingleIntSave: createSingleIntSave,
        deleteSingleInt: deleteSingleInt,
        vetDayList: vetDayList,
        vetDayRange: vetDayRange,
        updateSingleIntSave: updateSingleIntSave,
        viewIntervalsAction: viewIntervalsAction,
        viewIntervalsMultiDayCallback: viewIntervalsMultiDayCallback,
        viewIntervalsMultiDayCallbackRaw: viewIntervalsMultiDayCallbackRaw,
    };

});



( run in 1.102 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )