مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

arezoo.fg

عضویت از 1394/08/11

export dhtmlxgantt

  • دوشنبه 25 مرداد 1395
  • 17:18
تشکر میکنم

سلام من یه گانت چارت dhxgantt  دارم که بهش یه کد export  اضافه کردم ولی وقتی export  میکنم ماه و روز انگلیسی هستش, کدهم که برای export هست را قرار دادم...

 فقط اگه می دونید اگه کمکم کنید ممنون میشم.

(function () {

    var apiUrl = "https://export.dhtmlx.com/gantt";

    var templates = [
        "leftside_text",
        "rightside_text",
        "task_text",
        "progress_text",
        "task_class"
    ];

    function defaults(obj, std) {
        for (var key in std)
            if (!obj[key])
                obj[key] = std[key];
        return obj;
    }

    //compatibility for new versions of gantt
    if (!gantt.ajax) {
        if (window.dhtmlxAjax) {
            gantt.ajax = window.dhtmlxAjax;
        } else if (window.dhx4) {
            gantt.ajax = window.dhx4.ajax;
        }
    }

    function mark_columns(base) {
        var columns = base.config.columns;
        if (columns)
            for (var i = 0; i < columns.length; i++) {
                if (columns[i].template)
                    columns[i].$template = true;
            }
    }


    function add_export_methods(gantt) {
        var color_box = null;
        var color_hash = {};
        function get_styles(css) {
            if (!color_box) {
                var color_box = document.createElement("DIV");
                color_box.style.cssText = "position:absolute; display:none;";
                document.body.appendChild(color_box);
            }
            if (color_hash[css])
                return color_hash[css];

            color_box.className = css;
            return (color_hash[css] = get_color(color_box, "color") + ";" + get_color(color_box, "backgroundColor"));
        }
        gantt.exportToPDF = function (config) {
            if (config && config.raw) {
                config = defaults(config, {
                    name: "gantt.pdf", data: this._serialize_html()
                });
            } else {
                config = defaults((config || {}), {
                    name: "gantt.pdf",
                    header: "<h1 style=text-align:center>شرکت پارس سازان </h1>",

                    data: this._serialize_all(),
                    config: this.config,
                   
                });
                fix_columns(gantt, config.config.columns);
            }

            config.version = this.version;
            this._send_to_export(config, "pdf");
        };

        gantt.exportToPNG = function (config) {
            if (config && config.raw) {
                config = defaults(config, {
                    name: "gantt.png", data: this._serialize_html()
                });
            } else {
                config = defaults((config || {}), {
                    name: "gantt.png",
                    data: this._serialize_all(),
                    config: this.config
                });
                fix_columns(gantt, config.config.columns);
            }

            config.version = this.version;
            this._send_to_export(config, "png");
        };

        gantt.exportToICal = function (config) {
            config = defaults((config || {}), {
                name: "gantt.ical",
                data: this._serialize_plain().data,
                version: this.version
            });
            this._send_to_export(config, "ical");
        };



        function eachTaskTimed(start, end) {
            return function (code, parent, master) {
                parent = parent || this.config.root_id;
                master = master || this;

                var branch = this.getChildren(parent);
                if (branch)
                    for (var i = 0; i < branch.length; i++) {
                        var item = this._pull[branch[i]];
                        if ((!start || item.end_date > start) && (!end || item.start_date < end))
                            code.call(master, item);

                        if (this.hasChild(item.id))
                            this.eachTask(code, item.id, master);
                    }
            };
        }

        gantt.exportToExcel = function (config) {
            config = config || {};

            var tasks, dates;
            var state, scroll;
            if (config.start || config.end) {
                state = this.getState();
                dates = [this.config.start_date, this.config.end_date];
                scroll = this.getScrollState();
                var convert = this.date.str_to_date(this.config.api_date);
                tasks = this.eachTask;
              
                if (config.start)
                    this.config.start_date = convert(config.start);
                if (config.end)
                    this.config.end_date = convert(config.end);

                this.render();
                this.eachTask = eachTaskTimed(this.config.start_date, this.config.end_date);
            }

            this._no_progress_colors = config.visual === "base-colors";

            config = defaults(config, {
                name: "gantt.xlsx",
                title: "Tasks",
                data: this._serialize_table(config).data,
                columns: this._serialize_columns({ rawDates: true }),
                version: this.version
            });

            if (config.visual)
                config.scales = this._serialize_scales(config);

            this._send_to_export(config, "excel");

            if (config.start || config.end) {
                this.config.start_date = state.min_date;
                this.config.end_date = state.max_date;
                this.eachTask = tasks;

                this.render();
                this.scrollTo(scroll.x, scroll.y);

                this.config.start_date = dates[0];
                this.config.end_date = dates[1];
            }
        };

        gantt.exportToJSON = function (config) {
            config = defaults((config || {}), {
                name: "gantt.json",
                data: this._serialize_all(),
                config: this.config,
                columns: this._serialize_columns(),
                worktime: {
                    hours: this._working_time_helper.hours,
                    dates: this._working_time_helper.dates
                },
                version: this.version
            });
            this._send_to_export(config, "json");
        };

        gantt._msp_config = function (config) {

            if (config.project)
                for (var i in config.project) {
                    if (!config._custom_data)
                        config._custom_data = {};
                    config._custom_data[i] = config.project[i](this.config);
                }

            if (config.tasks)
                for (var j = 0; j < config.data.length; j++) {
                    var el = this.getTask(config.data[j].id);
                    if (!el._custom_data)
                        el._custom_data = {};
                    for (var i in config.tasks)
                        el._custom_data[i] = config.tasks[i](el, this.config);
                }

            delete config.project;
            delete config.tasks;

            config.time = {
                hours: gantt._working_time_helper.hours,
                dates: gantt._working_time_helper.dates
            };

            var p_dates = this.getSubtaskDates();
            var format = this.date.date_to_str("%d-%m-%Y %H:%i:%s");
            config.start_end = {
                start_date: format(p_dates.start_date),
                end_date: format(p_dates.end_date)
            };

        };

        gantt._msp_data = function () {
            var old_xml_format = this.templates.xml_format;
            this.templates.xml_format = this.date.date_to_str("%d-%m-%Y %H:%i:%s");

            var data = this._serialize_all();

            this.templates.xml_format = old_xml_format;
            return data;
        };

        gantt._ajax_to_export = function (data, type, callback) {
            delete data.callback;

            var url = data.server || apiUrl;

            gantt.ajax.post(url,
                "type=" + type + "&store=1&data=" + encodeURIComponent(JSON.stringify(data)),
                function (loader) {
                    var fail = loader.xmlDoc.status > 400;
                    var info = null;

                    if (!fail) {
                        try {
                            info = JSON.parse(loader.xmlDoc.responseText);
                        } catch (e) { }
                    }
                    callback(info);
                }
            );
        };

        gantt._send_to_export = function (data, type) {
            if (data.config)
                mark_columns(data, type);

            if (data.callback)
                return gantt._ajax_to_export(data, type, data.callback);

            var form = this._create_hidden_form();
            form.firstChild.action = data.server || apiUrl;
            form.firstChild.childNodes[0].value = JSON.stringify(data);
            form.firstChild.childNodes[1].value = type;
            form.firstChild.submit();
        };

        gantt._create_hidden_form = function () {
            if (!this._hidden_export_form) {
                var t = this._hidden_export_form = document.createElement("div");
                t.style.display = "none";
                t.innerHTML = "<form method='POST' target='_blank'><textarea name='data' style='width:0px; height:0px;' readonly='true'></textarea><input type='hidden' name='type' value=''></form>";
                document.body.appendChild(t);
            }
            return this._hidden_export_form;
        };

        //patch broken json serialization in gantt 2.1
        var original = gantt.json._copyObject;
        function copy_object_base(obj) {
            var copy = {};
            for (var key in obj) {
                if (key.charAt(0) == "$")
                    continue;
                copy[key] = obj[key];
            }
            copy.start_date = gantt.templates.xml_format(copy.start_date);
            if (copy.end_date)
                copy.end_date = gantt.templates.xml_format(copy.end_date);

            return copy;
        }

        function copy_object_plain(obj) {
            var text = gantt.templates.task_text(obj.start_date, obj.end_date, obj);

            var copy = copy_object_base(obj);
            copy.text = text || copy.text;

            return copy;
        }

        function get_color(node, style) {
            var value = node.currentStyle ? node.currentStyle[style] : getComputedStyle(node, null)[style];
            var rgb = value.replace(/\s/g, '').match(/^rgba?\((\d+),(\d+),(\d+)/i);
            return ((rgb && rgb.length === 4) ?
            ("0" + parseInt(rgb[1], 10).toString(16)).slice(-2) +
            ("0" + parseInt(rgb[2], 10).toString(16)).slice(-2) +
            ("0" + parseInt(rgb[3], 10).toString(16)).slice(-2) : value).replace("#", "");
        }

        function copy_object_table(obj) {
            var copy = copy_object_columns(obj, copy_object_plain(obj));
            if (copy.start_date)
                copy.start_date = obj.start_date.valueOf();
            if (copy.end_date)
                copy.end_date = obj.end_date.valueOf();

            copy.$start = gantt._day_index_by_date(obj.start_date);
            copy.$end = gantt._day_index_by_date(obj.end_date);
            copy.$level = obj.$level;
            copy.$type = obj.$rendered_type;

            var tmps = gantt.templates;
            copy.$text = tmps.task_text(obj.start, obj.end_date, obj);
            copy.$left = tmps.leftside_text ? tmps.leftside_text(obj.start, obj.end_date, obj) : "";
            copy.$right = tmps.rightside_text ? tmps.rightside_text(obj.start, obj.end_date, obj) : "";

            return copy;
        }

        function copy_object_colors(obj) {
            var copy = copy_object_table(obj);

            var node = gantt.getTaskNode(obj.id);
            if (node && node.firstChild) {
                var color = get_color((gantt._no_progress_colors ? node : node.firstChild), "backgroundColor");
                if (color == "363636")
                    color = get_color(node, "backgroundColor");

                copy.$color = color;
            } else if (obj.color)
                copy.$color = obj.color;

            return copy;
        }

        function copy_object_columns(obj, copy) {
            for (var i = 0; i < gantt.config.columns.length; i++) {
                var ct = gantt.config.columns[i].template;
                if (ct) {
                    var val = ct(obj);
                    if (val instanceof Date)
                        val = gantt.templates.date_grid(val, obj);
                    copy["_" + i] = val;
                }
            }
            return copy;
        }

        function copy_object_all(obj) {
            var copy = copy_object_base(obj);

            //serialize all text templates
            for (var i = 0; i < templates.length; i++) {
                var template = gantt.templates[templates[i]];
                if (template)
                    copy["$" + i] = template(obj.start_date, obj.end_date, obj);
            }

            copy_object_columns(obj, copy);
            copy.open = obj.$open;
            return copy;
        }

        function fix_columns(gantt, columns) {
            for (var i = 0; i < columns.length; i++) {
                columns[i].label = columns[i].label || gantt.locale.labels["column_" + columns[i].name];
                if (typeof columns[i].width == "string") columns[i].width = columns[i].width * 1;
            }
        }

        gantt._serialize_html = function () {
            return this.$container.parentNode.innerHTML;
        };

        gantt._serialize_all = function () {
            gantt.json._copyObject = copy_object_all;
            var data = export_serialize();
            gantt.json._copyObject = original;
            return data;
        };

        gantt._serialize_plain = function () {
            var config = gantt.templates.xml_format;
            gantt.templates.xml_format = gantt.date.date_to_str("%Y%m%dT%H%i%s", true);
            gantt.json._copyObject = copy_object_plain;

            var data = export_serialize();

            gantt.templates.xml_format = config;
            gantt.json._copyObject = original;

            delete data.links;
            return data;
        };

        gantt._serialize_table = function (config) {
            gantt.json._copyObject = config.visual ? copy_object_colors : copy_object_table;
            var data = export_serialize();
            gantt.json._copyObject = original;

            delete data.links;

            if (config.cellColors) {
                var css = this.templates.task_cell_class;
                if (css) {
                    var raw = this._scale_helpers.prepareConfigs(this._get_scales(), this.config.min_column_width, (this._get_resize_options().x ? Math.max(this.config.autosize_min_width, 0) : this.$task.offsetWidth), this.config.scale_height - 1);
                    var steps = raw[0].trace_x;
                    for (var i = 1; i < raw.length; i++)
                        if (raw[i].trace_x.length > steps.length)
                            steps = raw[i].trace_x;

                    for (var i = 0; i < data.data.length; i++) {
                        data.data[i].styles = [];
                        var task = this.getTask(data.data[i].id);
                        for (var j = 0; j < steps.length; j++) {
                            var date = steps[j];
                            var cell_css = css(task, date);
                            if (cell_css)
                                data.data[i].styles.push({ index: j, styles: get_styles(cell_css) });
                        }
                    }
                }
            }
            return data;
        };

        gantt._serialize_scales = function (config) {
            var scales = [];
            var raw = this._scale_helpers.prepareConfigs(this._get_scales(), this.config.min_column_width, (this._get_resize_options().x ? Math.max(this.config.autosize_min_width, 0) : this.$task.offsetWidth), this.config.scale_height - 1);

            var min = Infinity;
            var max = 0;
            for (var i = 0; i < raw.length; i++) min = Math.min(min, raw[i].col_width);

            for (var i = 0; i < raw.length; i++) {
                var start = 0;
                var end = 0;
                var row = [];

                scales.push(row);
                var step = raw[i];
                max = Math.max(max, step.trace_x.length);
                var template = step.template || (step.date ? gantt.date.date_to_str(step.date) : gantt.config.date_scale);

                for (var j = 0; j < step.trace_x.length; j++) {
                    var date = step.trace_x[j];
                    end = start + Math.round(step.width[j] / min);

                    var scale_cell = { text: template(date), start: start, end: end };

                    if (config.cellColors) {
                        var css = step.css || this.templates.scale_cell_class;
                        if (css) {
                            var scale_css = css(date);
                            if (scale_css)
                                scale_cell.styles = get_styles(scale_css);
                        }
                    }

                    row.push(scale_cell);
                    start = end;
                }
            }

            return { width: max, height: scales.length, data: scales };
        };

        gantt._serialize_columns = function (config) {
            gantt.exportMode = true;

            var columns = [];
            var cols = gantt.config.columns;

            var ccount = 0;
            for (var i = 0; i < cols.length; i++) {
                if (cols[i].name == "add" || cols[i].name == "buttons") continue;

                columns[ccount] = {
                    id: ((cols[i].template) ? ("_" + i) : cols[i].name),
                    header: cols[i].label || gantt.locale.labels["column_" + cols[i].name],
                    width: (cols[i].width ? Math.floor(cols[i].width / 4) : "")
                };

                if (cols[i].name == "duration")
                    columns[ccount].type = "number";
                if (cols[i].name == "start_date" || cols[i].name == "end_date") {
                    columns[ccount].type = "date";
                    if (config && config.rawDates)
                        columns[ccount].id = cols[i].name;
                }

                ccount++;
            }

            gantt.exportMode = false;
            return columns;
        };

        function export_serialize() {
            gantt.exportMode = true;
            var data = gantt.serialize();
            gantt.exportMode = false;
            return data;
        }
    }

    add_export_methods(gantt);
    if (window.Gantt && Gantt.plugin)
        Gantt.plugin(add_export_methods);

})();

(function () {
    var apiUrl = "https://export.dhtmlx.com/gantt";

    function set_level(data) {
        for (var i = 0; i < data.length; i++) {
            if (data[i].parent == 0) {
                data[i]._lvl = 1;
            }
            for (var j = i + 1; j < data.length; j++) {
                if (data[i].id == data[j].parent) {
                    data[j]._lvl = data[i]._lvl + 1;
                }
            }
        }
    }

    function clear_level(data) {
        for (var i = 0; i < data.length; i++) {
            delete data[i]._lvl
        }
    }

    function clear_rec_links(data) {
        set_level(data.data);
        var tasks = {};
        for (var i = 0; i < data.data.length; i++) {
            tasks[data.data[i].id] = data.data[i];
        }

        var links = {};
        for (i = 0; i < data.links.length; i++) {
            var link = data.links[i];
            if (gantt.isTaskExists(link.source) && gantt.isTaskExists(link.target)) {
                links[link.id] = link;
            }
        }

        for (i in links) {
            make_links_same_level(links[i], tasks);
        }

        var skippedLinks = {};
        for (i in tasks) {
            clear_circ_dependencies(tasks[i], links, tasks, {}, skippedLinks, null);
        }

        for (i in links) {
            clear_links_same_level(links, tasks);
        }

        for (i = 0; i < data.links.length; i++) {
            if (!links[data.links[i].id]) {
                data.links.splice(i, 1);
                i--;
            }
        }

        clear_level(data.data);
    }

    function clear_circ_dependencies(task, links, tasks, usedTasks, skippedLinks, prevLink) {
        var sources = task.$_source;
        if (!sources) return;

        if (usedTasks[task.id]) {
            on_circ_dependency_find(prevLink, links, usedTasks, skippedLinks);
        }

        usedTasks[task.id] = true;

        var targets = {};

        for (var i = 0; i < sources.length; i++) {
            if (skippedLinks[sources[i]]) continue;
            var curLink = links[sources[i]];
            var targetTask = tasks[curLink._target];
            if (targets[targetTask.id]) { // two link from one task to another
                on_circ_dependency_find(curLink, links, usedTasks, skippedLinks);
            }
            targets[targetTask.id] = true;
            clear_circ_dependencies(targetTask, links, tasks, usedTasks, skippedLinks, curLink);
        }
        usedTasks[task.id] = false;
    }

    function on_circ_dependency_find(link, links, usedTasks, skippedLinks) {
        if (link) {
            if (gantt.callEvent("onExportCircularDependency", [link.id, link])) {
                delete links[link.id];
            }

            delete usedTasks[link._source];
            delete usedTasks[link._target];
            skippedLinks[link.id] = true;
        }
    }

    function make_links_same_level(link, tasks) {
        var task,
			targetLvl,
			linkT = {
			    target: tasks[link.target],
			    source: tasks[link.source]
			};

        if (linkT.target._lvl != linkT.source._lvl) {
            if (linkT.target._lvl < linkT.source._lvl) {
                task = "source";
                targetLvl = linkT.target._lvl
            }
            else {
                task = "target";
                targetLvl = linkT.source._lvl;
            }

            do {
                var parent = tasks[linkT[task].parent];
                if (!parent) break;
                linkT[task] = parent;
            } while (linkT[task]._lvl < targetLvl);

            var sourceParent = tasks[linkT.source.parent],
				targetParent = tasks[linkT.target.parent];

            while (sourceParent && targetParent && sourceParent.id != targetParent.id) {
                linkT.source = sourceParent;
                linkT.target = targetParent;
                sourceParent = tasks[linkT.source.parent];
                targetParent = tasks[linkT.target.parent];
            }
        }

        link._target = linkT.target.id;
        link._source = linkT.source.id;

        if (!linkT.target.$_target)
            linkT.target.$_target = [];
        linkT.target.$_target.push(link.id);

        if (!linkT.source.$_source)
            linkT.source.$_source = [];
        linkT.source.$_source.push(link.id);
    }

    function clear_links_same_level(links, tasks) {
        for (var link in links) {
            delete links[link]._target;
            delete links[link]._source;
        }

        for (var task in tasks) {
            delete tasks[task].$_source;
            delete tasks[task].$_target;
        }
    }


    function customProjectProperties(data, config) {
        if (config && config.project) {
            for (var i in config.project) {
                if (!gantt.config.$custom_data)
                    gantt.config.$custom_data = {};
                gantt.config.$custom_data[i] = typeof config.project[i] == "function" ? config.project[i](gantt.config) : config.project[i];
            }
            delete config.project;
        }
    }

    function customTaskProperties(data, config) {
        if (config && config.tasks) {
            data.data.forEach(function (el) {
                for (var i in config.tasks) {
                    if (!el.$custom_data)
                        el.$custom_data = {};
                    el.$custom_data[i] = typeof config.tasks[i] == "function" ? config.tasks[i](el, gantt.config) : config.tasks[i];
                }
            });
            delete config.tasks;
        }
    }

    function exportConfig(data, config) {
        var p_name = config.name || 'gantt.xml';
        delete config.name;

        gantt.config.custom = config;
        var wTime = gantt._working_time_helper;
        var time;

        if (wTime.get_calendar) {
            time = wTime.get_calendar();
        } else {
            time = {
                hours: gantt._working_time_helper.hours,
                dates: gantt._working_time_helper.dates
            };
        }
        var p_dates = gantt.getSubtaskDates();
        if (p_dates.start_date && p_dates.end_date) {
            gantt.config.start_end = {
                start_date: gantt.templates.xml_format(p_dates.start_date),
                end_date: gantt.templates.xml_format(p_dates.end_date)
            };
        }

        var manual = config.auto_scheduling === undefined ? false : !!config.auto_scheduling;

        var res = {
            callback: config.callback || null,
            config: gantt.config,
            data: data,
            manual: manual,
            name: p_name,
            worktime: time
        };
        for (var i in config) res[i] = config[i];
        return res;
    }

    function add_export_methods(gantt) {
        gantt._ms_export = {};

        gantt.exportToMSProject = function (config) {
            config = config || {};
            config.skip_circular_links = config.skip_circular_links === undefined ? true : !!config.skip_circular_links;

            var old_xml_format = this.templates.xml_format;
            this.templates.xml_format = this.date.date_to_str("%d-%m-%Y %H:%i:%s");
            var data = this._serialize_all();

            customProjectProperties(data, config);

            customTaskProperties(data, config);

            if (config.skip_circular_links) {
                clear_rec_links(data);
            }

            config = exportConfig(data, config);

            this._send_to_export(config, "msproject");
            this.templates.xml_format = old_xml_format;
            this.config.$custom_data = null;
            this.config.custom = null;
        };


        function sendImportAjax(config) {
            var url = config.server || apiUrl;
            var store = config.store || 0;
            var formData = config.data;
            var callback = config.callback;

            var settings = {};
            if (config.durationUnit) settings.durationUnit = config.durationUnit
            if (config.projectProperties) settings.projectProperties = config.projectProperties;
            if (config.taskProperties) settings.taskProperties = config.taskProperties;

            formData.append("type", "msproject-parse");
            formData.append("data", JSON.stringify(settings));

            if (store)
                formData.append("store", store);

            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function (e) {
                if (xhr.readyState == 4 && xhr.status == 0) {// network error
                    if (callback) {
                        callback(null);
                    }
                }
            };

            xhr.onload = function () {

                var fail = xhr.status > 400;
                var info = null;

                if (!fail) {
                    try {
                        info = JSON.parse(xhr.responseText);
                    } catch (e) { }
                }

                if (callback) {
                    callback(info);
                }

            };

            xhr.open('POST', url, true);
            xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
            xhr.send(formData);
        }

        gantt.importFromMSProject = function (config) {
            var formData = config.data;

            if (formData instanceof FormData) {

            } else if (formData instanceof File) {
                var data = new FormData();
                data.append("file", formData);
                config.data = data;
            }
            sendImportAjax(config);
        };
    }

    add_export_methods(gantt);
    if (window.Gantt && Gantt.plugin)
        Gantt.plugin(add_export_methods);

})();

 

پاسخ های این پرسش

تعداد پاسخ ها : 0 پاسخ
در حال حاضر هیچ پاسخی ارسال نشده است
کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)