Prolem with deleteMarkedTimespan and addMarkedTimespan

Hello everyone, here my code

<link href="/Scripts/dhtmlxscheduler.css" rel="stylesheet" type="text/css" />
<script src="/Scripts/dhtmlxscheduler_active_links.js" type="text/javascript" charset="utf-8"></script>
<script src="/Scripts/dhtmlxscheduler_editors.js" type="text/javascript" charset="utf-8"></script>
<script src="/Scripts/dhtmlxscheduler_limit.js" type="text/javascript" charset="utf-8"></script>

<style type="text/css" media="screen">
	html, body {
		margin:0px;
		padding:0px;
		height:100%;
		overflow:hidden;
	}
	
	/* enabling marked timespans for month view */
	.dhx_scheduler_month .dhx_marked_timespan {
		display: block;
	}
	/* style to display special dates, e.g. holidays */
	.holiday {
        background-color: #fadcd3;
		text-align: center;
		font-size: 24px;
		color: #e2b8ac;
	}
	/* if there are still pending tasks for some day */
	.pending {
		background: #fdffd3 url(../images/!_yellow.png) no-repeat center center;
	}
	/* if all tasks for this day were completed */
	.completed {
		background: #d9f5db url(../images/v_green.png) no-repeat center center;
	}
	/* we don't want to show that marked timespans on day and week views */
	.dhx_scheduler_day .pending, .dhx_scheduler_week .pending, .dhx_scheduler_day .completed, .dhx_scheduler_week .completed {
		display: none;
	}
</style>

<script type="text/javascript" charset="utf-8">
    function init() {
        // view config
        scheduler.config.xml_date = "%m/%d/%Y %H:%i";
        scheduler.config.first_hour = 8;
        scheduler.config.active_link_view = "week"; // where we can jump from the month view
        scheduler.config.details_on_dblclick = true;

        // disable drag drop
        scheduler.config.drag_create = false;
        scheduler.config.drag_move = false;

        // init
        scheduler.init('scheduler_here', null, "month");

        // Setting up holidays
        var holidays = [new Date(2012, 7, 4), new Date(2012, 7, 7), new Date(2012, 7, 30)];
        for (var i = 0; i < holidays.length; i++) {
            var date = holidays[i];
            var options = {
                start_date: date,
                end_date: scheduler.date.add(date, 1, "day"),
                type: "dhx_time_block", /* creating events on those dates will be disabled - dates are blocked */
                css: "holiday",
                html: "Holiday"
            };
            scheduler.addMarkedTimespan(options);
        }
        // function will check statuses of events on particular date and update it's status in month view
        var updateDayStatus = function(event_id, ev) {
            var day = scheduler.date.date_part(new Date(ev.start_date));
            var next_day = scheduler.date.add(day, 1, "day");
            var events = scheduler.getEvents(day, next_day);

            // remove current status
            scheduler.deleteMarkedTimespan({ start_date: day, end_date: next_day });

            if (!events.length)
                return; // no events on that day, nothing to mark

            var status = true; // completed
            for (var i = 0; i < events.length; i++) {
                if (!events[i].booking) {
                    status = false;
                    break;
                }
            }

            var options = {
                start_date: day,
                end_date: next_day,
                css: (status) ? "completed" : "pending"
            };
            scheduler.addMarkedTimespan(options);

            return true;
        };
        scheduler.attachEvent("onEventAdded", updateDayStatus);
        scheduler.attachEvent("onEventChanged", updateDayStatus);
        scheduler.attachEvent("onEventDeleted", updateDayStatus);

        //repaint view
        scheduler.setCurrentView();

        // on load
        scheduler.load("");
        // on save
        var dp = new dataProcessor("");
        dp.init(scheduler);
        dp.setTransactionMode("POST", false);
    }
</script>

If I commet out line src="/Scripts/dhtmlxscheduler_limit.js" AND line deleteMarkedTimespan AND line addMarkedTimespan, the scheduler is loaded and saved fine.
If I uncomment one of them, the scheduler can’t save anything, just view.

Please help me!

Hello,
are you sure you’ve specified correct url to following extension files?
/Scripts/dhtmlxscheduler_active_links.js
/Scripts/dhtmlxscheduler_editors.js
/Scripts/dhtmlxscheduler_limit.js

usually they are placed into /ext subfolder, e.g.
/Scripts/ext/dhtmlxscheduler_active_links.js
/Scripts/ext/dhtmlxscheduler_editors.js
/Scripts/ext/dhtmlxscheduler_limit.js

I’ve tested your code on our example, everything seemed working, I could create event with double click, changes were sent to the server

Yes, I copied them from folder ext to folder Script, so it correct. 2 files editor.js and active_link.js work fine, just limit.js give me problem.
Actually it’s not full, I has removed some config and event, here is full code

<script src="/Scripts/dhtmlxscheduler.js" type="text/javascript"></script>
    <link href="/Scripts/dhtmlxscheduler.css" rel="stylesheet" type="text/css" />
	<script src="/Scripts/dhtmlxscheduler_active_links.js" type="text/javascript" charset="utf-8"></script>
	<script src="/Scripts/dhtmlxscheduler_editors.js" type="text/javascript" charset="utf-8"></script>
    <script src="/Scripts/dhtmlxscheduler_limit.js" type="text/javascript" charset="utf-8"></script>
    
    <style type="text/css" media="screen">
		html, body {
			margin:0px;
			padding:0px;
			height:100%;
			overflow:hidden;
		}
		
		/* enabling marked timespans for month view */
		.dhx_scheduler_month .dhx_marked_timespan {
			display: block;
		}
		/* if there are still pending tasks for some day */
		.pending {
			background: #fdffd3 url(../images/!_yellow.png) no-repeat center center;
		}
		/* if all tasks for this day were completed */
		.completed {
			background: #d9f5db url(../images/v_green.png) no-repeat center center;
		}
		/* we don't want to show that marked timespans on day and week views */
		.dhx_scheduler_day .pending, .dhx_scheduler_week .pending, .dhx_scheduler_day .completed, .dhx_scheduler_week .completed {
			display: none;
		}
	</style>
	
    <script type="text/javascript" charset="utf-8">
        function init() {          
            scheduler.config.xml_date = "%m/%d/%Y %H:%i";
            scheduler.config.first_hour = 8;
            scheduler.config.active_link_view = "month"; // where we can jump from the month view
            scheduler.config.details_on_dblclick = true;           
            scheduler.templates.event_bar_date = function(start, end, ev) {
                return "";
            };
        
            scheduler.templates.event_bar_text = function(start, end, ev) {
                return ev.fullname;
            };         
            scheduler.templates.lightbox_header = function(start, end, ev) {
                return "";
            };           
            scheduler.config.lightbox.sections = [
				{ name: "description", height: 15, map_to: "text", type: "textarea" },
				{ name: "fullname", height: 15, map_to: "fullname", type: "textarea", focus: true }
			];
            scheduler.locale.labels.section_description = "Info";
            scheduler.locale.labels.section_fullname = "Name";
          
            scheduler.config.drag_create = false;
            scheduler.config.drag_move = false;

     
            scheduler.init('scheduler_here', null, "month");

            // function will check statuses of events on particular date and update it's status in month view
            var updateDayStatus = function(event_id, ev) {
                var day = scheduler.date.date_part(new Date(ev.start_date));
                var next_day = scheduler.date.add(day, 1, "day");
                var events = scheduler.getEvents(day, next_day);

                // remove current status
                scheduler.deleteMarkedTimespan({ start_date: day, end_date: next_day });

                if (!events.length)
                    return; // no events on that day, nothing to mark

                var status = true; // completed
                for (var i = 0; i < events.length; i++) {
                    if (!events[i].booking) {
                        status = false;
                        break;
                    }
                }

                var options = {
                    start_date: day,
                    end_date: next_day,
                    css: (status) ? "completed" : "pending"
                };
                scheduler.addMarkedTimespan(options);

                return true;
            };
            scheduler.attachEvent("onEventAdded", updateDayStatus);
            scheduler.attachEvent("onEventChanged", updateDayStatus);
            scheduler.attachEvent("onEventDeleted", updateDayStatus);
        
    //repaint view
            scheduler.setCurrentView();

         
            scheduler.attachEvent('onEventCreated', function(event_id) {
                var ev = scheduler.getEvent(event_id);
                var convert = scheduler.date.date_to_str("%d/%m/%y");
                ev.text = 'Info ' + convert(ev.start_date);
            });
       
            scheduler.attachEvent("onEmptyClick", function(date, native_event_object) {
                //any custom logic here
                var day = scheduler.date.date_part(new Date(date));
                var next_day = scheduler.date.add(date, 1, "day");
                var events = scheduler.getEvents(day, next_day);
                if (!events.length)
                    scheduler.config.dblclick_create = true; // no events on that day, allow
                else scheduler.config.dblclick_create = false;
            });
            // on reload data after changes
            var _ifreload = 1;
            scheduler.attachEvent("onEventSave", function(id, data, is_new_event) {
                _ifreload = 1;
                return true;
            })
            scheduler.attachEvent("onEventCancel", function(event_id, is_new_event) {
                _ifreload = 0;
            });
            scheduler.attachEvent("onAfterLightbox", function() {
                if (_ifreload) {
                    scheduler.clearAll();
                    scheduler.load("");
                }
            });
      
            scheduler.load("");

            var dp = new dataProcessor("");
            dp.init(scheduler);
            dp.setTransactionMode("POST", false);
        }
    </script> 

It seems if I remove this code

scheduler.config.lightbox.sections = [
            { name: "description", height: 15, map_to: "text", type: "textarea" },
            { name: "fullname", height: 15, map_to: "fullname", type: "textarea", focus: true }
         ];
            scheduler.locale.labels.section_description = "Info";
            scheduler.locale.labels.section_fullname = "Name";

I can create and edit event, confused ?

And addMarkedTimespan do nothing, no color, no image, just red line in current day

check your onEmptyClick handler, i think there is an error in date range selections
instead of var day = scheduler.date.date_part(new Date(date)); var next_day = scheduler.date.add(date, 1, "day");
there should be var day = scheduler.date.date_part(new Date(date)); var next_day = scheduler.date.add(day, 1, "day");
currently it select events no only from clicked day, but from the next one. Here is the full code of the handler scheduler.attachEvent("onEmptyClick", function(date, native_event_object) { //any custom logic here var day = scheduler.date.date_part(new Date(date)); var next_day = scheduler.date.add(day, 1, "day"); var events = scheduler.getEvents(day, next_day); if (!events.length) scheduler.config.dblclick_create = true; // no events on that day, allow else scheduler.config.dblclick_create = false; });

Still not working. As I said in my previous post, if I remore scheduler.config.lightbox.sections…, scheduler working, so I think there is an error in these code

And addMarkedTimespan do nothing, no color, no image, just red line in current day

Please provide any kind of sample or demo link where issue can be checked

My sample I posted yesterday has lost, and now I can’t add attachment, forum error ?

If you have problems with attachments - you can send it by email to support@dhtmlx.com, with reference on this topic

I have sent email to support, hope you reply soon.

Hello, did you receive my email ? I attach my sample again, please watch and fix it soon
SAMPLE.rar (601 KB)

We was able to reconstruct issue ( it does occurs only if you do not have time section in lightbox )
Fixed version will be available on Monday.

Tuesday, is fixed version available ?

Hello,
problem has been fixed in dhtmlxScheduler 4.0 beta, you can download it here
viewtopic.php?f=6&t=31424

Hello, thanks for your help Aliaksandr. I now can edit and save event, but more things need to be fixed :
. Background and color only change when creating event, events were loaded from database will not, and when I refresh page, all background and color of events gone.
. When I create event, background and color not change right away, after I go to next month and back, background and color change, but it always load status complete no matter what I check or not.
. Vertical red dot line on current day, how can I remove it ?
SAMPLE.rar (624 KB)

Hello,

Try setting backgrounds after all events are loaded:scheduler.attachEvent("onXLE", function(){ //set backgrounds });
docs.dhtmlx.com/doku.php?id=dhtm … vent_onxle

You need to update current view to show timespans, calling scheduler.updateView() after scheduler.addMarkedTimespan() will do the job.
docs.dhtmlx.com/doku.php?id=dhtm … edtimespan

use mark_now config-
scheduler.config.mark_now = false;

Hello, thanks for your help Aliaksandr.
A remaining prolem is backgorund and color (status complete or pending, in case you think wrong) of events when loaded from database and when refresh page. I tried

scheduler.attachEvent("onXLE", function() { //any custom logic here updateDayStatus(); });
but it not working.

Please help me fix this

Hello, it’s a week and still I don’t has the answer

Please help me fix this problem :cry:

Hi, sorry for the delay
according the code from your demo, updateDayStatus takes two parameters - event id and event object.
So onXLE handler may look following:[code] scheduler.attachEvent(“onXLE”, function(){
var evs = scheduler.getEvents();
for(var i=0; i < evs.length; i++){
updateDayStatus(evs[i].id, evs[i]);

			}
			scheduler.setCurrentView();
		
		});[/code]